@burdenoff/microfe-assethandler 2026.703.2 → 2026.703.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/dist/assethandler/AssetHandlerRoot.js +18 -18
  2. package/dist/assethandler/hooks/useAssetHandlerNavigate.js +19 -0
  3. package/dist/assethandler/hooks/useAssetHandlerNavigate.js.map +1 -0
  4. package/dist/assethandler/pages/AiPredictionsPage.js +29 -29
  5. package/dist/assethandler/pages/AnalyticsPage.js +154 -154
  6. package/dist/assethandler/pages/AssetsAssetCategoriesPage.js +48 -48
  7. package/dist/assethandler/pages/AssetsAssetCheckInOutPage.js +84 -84
  8. package/dist/assethandler/pages/AssetsAssetCheckInOutPage.js.map +1 -1
  9. package/dist/assethandler/pages/AssetsAssetCreatePage.js +82 -82
  10. package/dist/assethandler/pages/AssetsAssetCreatePage.js.map +1 -1
  11. package/dist/assethandler/pages/AssetsAssetDetailPage.js +104 -103
  12. package/dist/assethandler/pages/AssetsAssetDetailPage.js.map +1 -1
  13. package/dist/assethandler/pages/AssetsAssetListPage.js +132 -132
  14. package/dist/assethandler/pages/AssetsAssetListPage.js.map +1 -1
  15. package/dist/assethandler/pages/AssetsAssetTrackingPage.js +52 -52
  16. package/dist/assethandler/pages/CmdbBrowserPage.js +27 -27
  17. package/dist/assethandler/pages/DashboardPage.js +119 -119
  18. package/dist/assethandler/pages/DashboardPage.js.map +1 -1
  19. package/dist/assethandler/pages/DigitalTwinPage.js +22 -22
  20. package/dist/assethandler/pages/DiscoveryJobsPage.js +35 -35
  21. package/dist/assethandler/pages/EsgDashboardPage.js +32 -32
  22. package/dist/assethandler/pages/FinanceBudgetDetailPage.js +57 -56
  23. package/dist/assethandler/pages/FinanceBudgetDetailPage.js.map +1 -1
  24. package/dist/assethandler/pages/FinanceFinanceHubPage.js +98 -98
  25. package/dist/assethandler/pages/FinanceFinanceHubPage.js.map +1 -1
  26. package/dist/assethandler/pages/FinanceInvoiceDetailPage.js +58 -57
  27. package/dist/assethandler/pages/FinanceInvoiceDetailPage.js.map +1 -1
  28. package/dist/assethandler/pages/IotDevicesPage.js +29 -29
  29. package/dist/assethandler/pages/ItilChangeDetailPage.js +76 -75
  30. package/dist/assethandler/pages/ItilChangeDetailPage.js.map +1 -1
  31. package/dist/assethandler/pages/ItilChangeManagementPage.js +49 -49
  32. package/dist/assethandler/pages/ItilIncidentDetailPage.js +63 -62
  33. package/dist/assethandler/pages/ItilIncidentDetailPage.js.map +1 -1
  34. package/dist/assethandler/pages/ItilIncidentManagementPage.js +72 -72
  35. package/dist/assethandler/pages/ItilItilhubPage.js +112 -112
  36. package/dist/assethandler/pages/ItilItilhubPage.js.map +1 -1
  37. package/dist/assethandler/pages/ItilProblemDetailPage.js +61 -60
  38. package/dist/assethandler/pages/ItilProblemDetailPage.js.map +1 -1
  39. package/dist/assethandler/pages/ItilProblemManagementPage.js +46 -46
  40. package/dist/assethandler/pages/KnowledgeBasePage.js +28 -28
  41. package/dist/assethandler/pages/MaintenanceMaintenanceCalendarPage.js +52 -52
  42. package/dist/assethandler/pages/MaintenanceMaintenanceSchedulerPage.js +29 -29
  43. package/dist/assethandler/pages/OperationsMaintenanceDetailPage.js +58 -57
  44. package/dist/assethandler/pages/OperationsMaintenanceDetailPage.js.map +1 -1
  45. package/dist/assethandler/pages/OperationsOperationsHubPage.js +80 -80
  46. package/dist/assethandler/pages/OperationsOperationsHubPage.js.map +1 -1
  47. package/dist/assethandler/pages/OperationsWorkOrderDetailPage.js +49 -48
  48. package/dist/assethandler/pages/OperationsWorkOrderDetailPage.js.map +1 -1
  49. package/dist/assethandler/pages/PortfolioPortfolioOverviewPage.js +52 -52
  50. package/dist/assethandler/pages/ProvenancePage.js +36 -36
  51. package/dist/assethandler/pages/SamLicensesPage.js +27 -27
  52. package/dist/assethandler/pages/SecurityComplianceDetailPage.js +39 -38
  53. package/dist/assethandler/pages/SecurityComplianceDetailPage.js.map +1 -1
  54. package/dist/assethandler/pages/SecurityPolicyDetailPage.js +50 -49
  55. package/dist/assethandler/pages/SecurityPolicyDetailPage.js.map +1 -1
  56. package/dist/assethandler/pages/SecuritySecurityEventDetailPage.js +47 -46
  57. package/dist/assethandler/pages/SecuritySecurityEventDetailPage.js.map +1 -1
  58. package/dist/assethandler/pages/SecuritySecurityHubPage.js +104 -104
  59. package/dist/assethandler/pages/SecuritySecurityHubPage.js.map +1 -1
  60. package/dist/assethandler/pages/TransactionsTransactionDetailPage.js +74 -73
  61. package/dist/assethandler/pages/TransactionsTransactionDetailPage.js.map +1 -1
  62. package/dist/assethandler/pages/TransactionsTransactionListPage.js +77 -77
  63. package/dist/assethandler/providers/AssetHandlerProvider.js +12 -12
  64. package/package.json +1 -1
@@ -1,8 +1,9 @@
1
1
  import { useAssetHandlerStore as e } from "../store/assethandlerStore.js";
2
- import { ArrowLeft as t, CheckCircle as n, XCircle as r } from "lucide-react";
3
- import { useNavigate as i, useParams as a } from "react-router-dom";
4
- import { Badge as o, Button as s, Card as c, CardContent as l, CardHeader as u, CardTitle as d, EmphasisPanel as f, GradientText as p, IllustratedEmptyState as m, NextSteps as h, PagePurpose as g, Separator as _ } from "@burdenoff/fe-libs/ui";
5
- import { jsx as v, jsxs as y } from "react/jsx-runtime";
2
+ import { useAssetHandlerNavigate as t } from "../hooks/useAssetHandlerNavigate.js";
3
+ import { ArrowLeft as n, CheckCircle as r, XCircle as i } from "lucide-react";
4
+ import { useParams as a } from "react-router-dom";
5
+ import { jsx as o, jsxs as s } from "react/jsx-runtime";
6
+ import { Badge as c, Button as l, Card as u, CardContent as d, CardHeader as f, CardTitle as p, EmphasisPanel as m, GradientText as h, IllustratedEmptyState as g, NextSteps as _, PagePurpose as v, Separator as y } from "@burdenoff/fe-libs/ui";
6
7
  //#region src/assethandler/pages/ItilChangeDetailPage.tsx
7
8
  var b = {
8
9
  critical: "destructive",
@@ -11,14 +12,14 @@ var b = {
11
12
  low: "secondary"
12
13
  };
13
14
  function x() {
14
- let x = i(), { changeId: S } = a(), { changeRequests: C, assets: w } = e(), T = C.find((e) => e.id === S) ?? C[0];
15
- if (!T) return /* @__PURE__ */ v("div", {
15
+ let x = t(), { changeId: S } = a(), { changeRequests: C, assets: w } = e(), T = C.find((e) => e.id === S) ?? C[0];
16
+ if (!T) return /* @__PURE__ */ o("div", {
16
17
  className: "p-6",
17
- children: /* @__PURE__ */ v(m, {
18
+ children: /* @__PURE__ */ o(g, {
18
19
  illustration: "empty-search",
19
20
  title: "Change request not found",
20
21
  description: "This change may have been completed or removed. Return to change management to find it.",
21
- action: /* @__PURE__ */ v(s, {
22
+ action: /* @__PURE__ */ o(l, {
22
23
  size: "sm",
23
24
  onClick: () => x("/itil/change-management"),
24
25
  children: "Back to changes"
@@ -26,57 +27,57 @@ function x() {
26
27
  })
27
28
  });
28
29
  let E = w.filter((e) => T.affectedAssets.includes(e.id));
29
- return /* @__PURE__ */ y("div", {
30
+ return /* @__PURE__ */ s("div", {
30
31
  className: "space-y-6 p-6",
31
32
  children: [
32
- /* @__PURE__ */ y("div", {
33
+ /* @__PURE__ */ s("div", {
33
34
  className: "flex items-center justify-between",
34
- children: [/* @__PURE__ */ y("div", {
35
+ children: [/* @__PURE__ */ s("div", {
35
36
  className: "flex items-center gap-4",
36
- children: [/* @__PURE__ */ v(s, {
37
+ children: [/* @__PURE__ */ o(l, {
37
38
  variant: "ghost",
38
39
  size: "icon",
39
40
  onClick: () => x("/itil/change-management"),
40
- children: /* @__PURE__ */ v(t, { className: "h-4 w-4" })
41
- }), /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ y("div", {
41
+ children: /* @__PURE__ */ o(n, { className: "h-4 w-4" })
42
+ }), /* @__PURE__ */ s("div", { children: [/* @__PURE__ */ s("div", {
42
43
  className: "flex items-center gap-3",
43
44
  children: [
44
- /* @__PURE__ */ v("h1", {
45
+ /* @__PURE__ */ o("h1", {
45
46
  className: "text-2xl font-bold",
46
- children: /* @__PURE__ */ v(p, { children: T.id })
47
+ children: /* @__PURE__ */ o(h, { children: T.id })
47
48
  }),
48
- /* @__PURE__ */ v(o, {
49
+ /* @__PURE__ */ o(c, {
49
50
  variant: T.type === "emergency" ? "destructive" : "outline",
50
51
  className: "capitalize",
51
52
  children: T.type
52
53
  }),
53
- /* @__PURE__ */ y(o, {
54
+ /* @__PURE__ */ s(c, {
54
55
  variant: b[T.risk],
55
56
  children: ["Risk: ", T.risk]
56
57
  }),
57
- /* @__PURE__ */ v(o, {
58
+ /* @__PURE__ */ o(c, {
58
59
  variant: "outline",
59
60
  children: T.status.replace("_", " ")
60
61
  })
61
62
  ]
62
- }), /* @__PURE__ */ v("p", {
63
+ }), /* @__PURE__ */ o("p", {
63
64
  className: "text-sm text-text-secondary mt-1",
64
65
  children: T.title
65
66
  })] })]
66
- }), /* @__PURE__ */ y("div", {
67
+ }), /* @__PURE__ */ s("div", {
67
68
  className: "flex gap-2",
68
- children: [/* @__PURE__ */ v(s, {
69
+ children: [/* @__PURE__ */ o(l, {
69
70
  variant: "outline",
70
71
  size: "sm",
71
72
  children: "Reject"
72
- }), /* @__PURE__ */ y(s, {
73
+ }), /* @__PURE__ */ s(l, {
73
74
  size: "sm",
74
- children: [/* @__PURE__ */ v(n, { className: "mr-2 h-4 w-4" }), "Approve"]
75
+ children: [/* @__PURE__ */ o(r, { className: "mr-2 h-4 w-4" }), "Approve"]
75
76
  })]
76
77
  })]
77
78
  }),
78
- /* @__PURE__ */ v(g, { children: "The full record of a single planned change: what is changing, its risk and schedule, which assets it touches, and where it stands in the approval chain. Use this page to approve, reject or track a change so it lands safely in its agreed window." }),
79
- /* @__PURE__ */ v(h, {
79
+ /* @__PURE__ */ o(v, { children: "The full record of a single planned change: what is changing, its risk and schedule, which assets it touches, and where it stands in the approval chain. Use this page to approve, reject or track a change so it lands safely in its agreed window." }),
80
+ /* @__PURE__ */ o(_, {
80
81
  storageKey: "assethandler-change-detail",
81
82
  steps: [
82
83
  {
@@ -99,55 +100,55 @@ function x() {
99
100
  }
100
101
  ]
101
102
  }),
102
- /* @__PURE__ */ y("div", {
103
+ /* @__PURE__ */ s("div", {
103
104
  className: "grid gap-6 lg:grid-cols-3",
104
- children: [/* @__PURE__ */ y(f, {
105
+ children: [/* @__PURE__ */ s(m, {
105
106
  className: "lg:col-span-2",
106
- children: [/* @__PURE__ */ v(u, {
107
+ children: [/* @__PURE__ */ o(f, {
107
108
  className: "px-0 pt-0",
108
- children: /* @__PURE__ */ v(d, { children: "Change Details" })
109
- }), /* @__PURE__ */ y(l, {
109
+ children: /* @__PURE__ */ o(p, { children: "Change Details" })
110
+ }), /* @__PURE__ */ s(d, {
110
111
  className: "space-y-4 px-0 pb-0",
111
112
  children: [
112
- /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("h4", {
113
+ /* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("h4", {
113
114
  className: "text-sm font-medium text-text-secondary",
114
115
  children: "Description"
115
- }), /* @__PURE__ */ v("p", {
116
+ }), /* @__PURE__ */ o("p", {
116
117
  className: "text-sm mt-1",
117
118
  children: T.description
118
119
  })] }),
119
- /* @__PURE__ */ v(_, {}),
120
- /* @__PURE__ */ y("div", {
120
+ /* @__PURE__ */ o(y, {}),
121
+ /* @__PURE__ */ s("div", {
121
122
  className: "grid grid-cols-2 gap-4 text-sm",
122
- children: [/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("span", {
123
+ children: [/* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("span", {
123
124
  className: "text-text-secondary",
124
125
  children: "Scheduled Start"
125
- }), /* @__PURE__ */ v("p", {
126
+ }), /* @__PURE__ */ o("p", {
126
127
  className: "font-medium",
127
128
  children: new Date(T.scheduledStart).toLocaleString()
128
- })] }), /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("span", {
129
+ })] }), /* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("span", {
129
130
  className: "text-text-secondary",
130
131
  children: "Scheduled End"
131
- }), /* @__PURE__ */ v("p", {
132
+ }), /* @__PURE__ */ o("p", {
132
133
  className: "font-medium",
133
134
  children: new Date(T.scheduledEnd).toLocaleString()
134
135
  })] })]
135
136
  }),
136
- /* @__PURE__ */ v(_, {}),
137
- /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("h4", {
137
+ /* @__PURE__ */ o(y, {}),
138
+ /* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("h4", {
138
139
  className: "text-sm font-medium text-text-secondary mb-2",
139
140
  children: "Affected Assets"
140
- }), /* @__PURE__ */ v("div", {
141
+ }), /* @__PURE__ */ o("div", {
141
142
  className: "space-y-2",
142
- children: E.map((e) => /* @__PURE__ */ y("div", {
143
+ children: E.map((e) => /* @__PURE__ */ s("div", {
143
144
  className: "flex items-center justify-between rounded border p-2",
144
- children: [/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("p", {
145
+ children: [/* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("p", {
145
146
  className: "text-sm font-medium",
146
147
  children: e.name
147
- }), /* @__PURE__ */ v("p", {
148
+ }), /* @__PURE__ */ o("p", {
148
149
  className: "text-xs text-text-secondary",
149
150
  children: e.assetTag
150
- })] }), /* @__PURE__ */ v(o, {
151
+ })] }), /* @__PURE__ */ o(c, {
151
152
  variant: "outline",
152
153
  children: e.status.replace("_", " ")
153
154
  })]
@@ -155,93 +156,93 @@ function x() {
155
156
  })] })
156
157
  ]
157
158
  })]
158
- }), /* @__PURE__ */ y("div", {
159
+ }), /* @__PURE__ */ s("div", {
159
160
  className: "space-y-4",
160
- children: [/* @__PURE__ */ y(c, { children: [/* @__PURE__ */ v(u, { children: /* @__PURE__ */ v(d, {
161
+ children: [/* @__PURE__ */ s(u, { children: [/* @__PURE__ */ o(f, { children: /* @__PURE__ */ o(p, {
161
162
  className: "text-base",
162
163
  children: "Properties"
163
- }) }), /* @__PURE__ */ v(l, { children: /* @__PURE__ */ y("dl", {
164
+ }) }), /* @__PURE__ */ o(d, { children: /* @__PURE__ */ s("dl", {
164
165
  className: "space-y-3 text-sm",
165
166
  children: [
166
- /* @__PURE__ */ y("div", {
167
+ /* @__PURE__ */ s("div", {
167
168
  className: "flex justify-between",
168
- children: [/* @__PURE__ */ v("dt", {
169
+ children: [/* @__PURE__ */ o("dt", {
169
170
  className: "text-text-secondary",
170
171
  children: "Type"
171
- }), /* @__PURE__ */ v("dd", {
172
+ }), /* @__PURE__ */ o("dd", {
172
173
  className: "font-medium capitalize",
173
174
  children: T.type
174
175
  })]
175
176
  }),
176
- /* @__PURE__ */ y("div", {
177
+ /* @__PURE__ */ s("div", {
177
178
  className: "flex justify-between",
178
- children: [/* @__PURE__ */ v("dt", {
179
+ children: [/* @__PURE__ */ o("dt", {
179
180
  className: "text-text-secondary",
180
181
  children: "Risk"
181
- }), /* @__PURE__ */ v("dd", { children: /* @__PURE__ */ v(o, {
182
+ }), /* @__PURE__ */ o("dd", { children: /* @__PURE__ */ o(c, {
182
183
  variant: b[T.risk],
183
184
  children: T.risk
184
185
  }) })]
185
186
  }),
186
- /* @__PURE__ */ y("div", {
187
+ /* @__PURE__ */ s("div", {
187
188
  className: "flex justify-between",
188
- children: [/* @__PURE__ */ v("dt", {
189
+ children: [/* @__PURE__ */ o("dt", {
189
190
  className: "text-text-secondary",
190
191
  children: "Status"
191
- }), /* @__PURE__ */ v("dd", { children: /* @__PURE__ */ v(o, {
192
+ }), /* @__PURE__ */ o("dd", { children: /* @__PURE__ */ o(c, {
192
193
  variant: "outline",
193
194
  children: T.status.replace("_", " ")
194
195
  }) })]
195
196
  }),
196
- /* @__PURE__ */ v(_, {}),
197
- /* @__PURE__ */ y("div", {
197
+ /* @__PURE__ */ o(y, {}),
198
+ /* @__PURE__ */ s("div", {
198
199
  className: "flex justify-between",
199
- children: [/* @__PURE__ */ v("dt", {
200
+ children: [/* @__PURE__ */ o("dt", {
200
201
  className: "text-text-secondary",
201
202
  children: "Requested By"
202
- }), /* @__PURE__ */ v("dd", {
203
+ }), /* @__PURE__ */ o("dd", {
203
204
  className: "text-xs",
204
205
  children: T.requestedBy
205
206
  })]
206
207
  }),
207
- /* @__PURE__ */ y("div", {
208
+ /* @__PURE__ */ s("div", {
208
209
  className: "flex justify-between",
209
- children: [/* @__PURE__ */ v("dt", {
210
+ children: [/* @__PURE__ */ o("dt", {
210
211
  className: "text-text-secondary",
211
212
  children: "Assigned To"
212
- }), /* @__PURE__ */ v("dd", {
213
+ }), /* @__PURE__ */ o("dd", {
213
214
  className: "text-xs",
214
215
  children: T.assignedTo
215
216
  })]
216
217
  }),
217
- /* @__PURE__ */ y("div", {
218
+ /* @__PURE__ */ s("div", {
218
219
  className: "flex justify-between",
219
- children: [/* @__PURE__ */ v("dt", {
220
+ children: [/* @__PURE__ */ o("dt", {
220
221
  className: "text-text-secondary",
221
222
  children: "Created"
222
- }), /* @__PURE__ */ v("dd", {
223
+ }), /* @__PURE__ */ o("dd", {
223
224
  className: "text-xs",
224
225
  children: new Date(T.createdAt).toLocaleDateString()
225
226
  })]
226
227
  })
227
228
  ]
228
- }) })] }), /* @__PURE__ */ y(c, { children: [/* @__PURE__ */ v(u, { children: /* @__PURE__ */ v(d, {
229
+ }) })] }), /* @__PURE__ */ s(u, { children: [/* @__PURE__ */ o(f, { children: /* @__PURE__ */ o(p, {
229
230
  className: "text-base",
230
231
  children: "Approvals"
231
- }) }), /* @__PURE__ */ v(l, { children: T.approvals.length === 0 ? /* @__PURE__ */ v("p", {
232
+ }) }), /* @__PURE__ */ o(d, { children: T.approvals.length === 0 ? /* @__PURE__ */ o("p", {
232
233
  className: "text-sm text-text-secondary text-center py-4",
233
234
  children: "No approvals yet"
234
- }) : /* @__PURE__ */ v("div", {
235
+ }) : /* @__PURE__ */ o("div", {
235
236
  className: "space-y-2",
236
- children: T.approvals.map((e, t) => /* @__PURE__ */ y("div", {
237
+ children: T.approvals.map((e, t) => /* @__PURE__ */ s("div", {
237
238
  className: "flex items-center justify-between rounded border p-2",
238
- children: [/* @__PURE__ */ y("div", {
239
+ children: [/* @__PURE__ */ s("div", {
239
240
  className: "flex items-center gap-2",
240
- children: [e.status === "approved" ? /* @__PURE__ */ v(n, { className: "h-4 w-4 text-status-success-text" }) : /* @__PURE__ */ v(r, { className: "h-4 w-4 text-status-error-text" }), /* @__PURE__ */ v("span", {
241
+ children: [e.status === "approved" ? /* @__PURE__ */ o(r, { className: "h-4 w-4 text-status-success-text" }) : /* @__PURE__ */ o(i, { className: "h-4 w-4 text-status-error-text" }), /* @__PURE__ */ o("span", {
241
242
  className: "text-sm",
242
243
  children: e.name
243
244
  })]
244
- }), /* @__PURE__ */ v("span", {
245
+ }), /* @__PURE__ */ o("span", {
245
246
  className: "text-xs text-text-secondary",
246
247
  children: new Date(e.date).toLocaleDateString()
247
248
  })]
@@ -1 +1 @@
1
- {"version":3,"file":"ItilChangeDetailPage.js","names":[],"sources":["../../../src/assethandler/pages/ItilChangeDetailPage.tsx"],"sourcesContent":["import {\n Badge,\n Button,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n Separator,\n GradientText,\n EmphasisPanel,\n PagePurpose,\n NextSteps,\n IllustratedEmptyState,\n} from '@burdenoff/fe-libs/ui';\nimport { ArrowLeft, CheckCircle, XCircle } from 'lucide-react';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport { useAssetHandlerStore } from '../store/assethandlerStore';\n\nconst riskColors: Record<string, 'destructive' | 'default' | 'secondary' | 'outline'> = {\n critical: 'destructive',\n high: 'destructive',\n medium: 'default',\n low: 'secondary',\n};\n\nexport function ItilChangeDetailPage() {\n const navigate = useNavigate();\n const { changeId } = useParams<{ changeId: string }>();\n const { changeRequests, assets } = useAssetHandlerStore();\n const change = changeRequests.find((item) => item.id === changeId) ?? changeRequests[0];\n\n if (!change)\n return (\n <div className=\"p-6\">\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title=\"Change request not found\"\n description=\"This change may have been completed or removed. Return to change management to find it.\"\n action={\n <Button size=\"sm\" onClick={() => navigate('/itil/change-management')}>\n Back to changes\n </Button>\n }\n />\n </div>\n );\n\n const affectedAssetDetails = assets.filter((a) => change.affectedAssets.includes(a.id));\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-4\">\n <Button variant=\"ghost\" size=\"icon\" onClick={() => navigate('/itil/change-management')}>\n <ArrowLeft className=\"h-4 w-4\" />\n </Button>\n <div>\n <div className=\"flex items-center gap-3\">\n <h1 className=\"text-2xl font-bold\">\n <GradientText>{change.id}</GradientText>\n </h1>\n <Badge\n variant={change.type === 'emergency' ? 'destructive' : 'outline'}\n className=\"capitalize\"\n >\n {change.type}\n </Badge>\n <Badge variant={riskColors[change.risk]}>Risk: {change.risk}</Badge>\n <Badge variant=\"outline\">{change.status.replace('_', ' ')}</Badge>\n </div>\n <p className=\"text-sm text-text-secondary mt-1\">{change.title}</p>\n </div>\n </div>\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\">\n Reject\n </Button>\n <Button size=\"sm\">\n <CheckCircle className=\"mr-2 h-4 w-4\" />\n Approve\n </Button>\n </div>\n </div>\n\n <PagePurpose>\n The full record of a single planned change: what is changing, its risk and schedule, which\n assets it touches, and where it stands in the approval chain. Use this page to approve,\n reject or track a change so it lands safely in its agreed window.\n </PagePurpose>\n\n <NextSteps\n storageKey=\"assethandler-change-detail\"\n steps={[\n {\n id: 'approve',\n label: 'Approve or reject this change',\n description: 'Sign off on the change once you have reviewed its risk.',\n done: change.status === 'approved' || change.status === 'completed',\n },\n {\n id: 'assets',\n label: 'Review affected assets',\n description: 'Confirm the blast radius before the change window.',\n onClick: () => navigate('/assets/asset-list'),\n },\n {\n id: 'calendar',\n label: 'Check the maintenance calendar',\n description: 'Make sure the schedule does not clash with other work.',\n onClick: () => navigate('/maintenance/maintenance-calendar'),\n },\n ]}\n />\n\n <div className=\"grid gap-6 lg:grid-cols-3\">\n <EmphasisPanel className=\"lg:col-span-2\">\n <CardHeader className=\"px-0 pt-0\">\n <CardTitle>Change Details</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4 px-0 pb-0\">\n <div>\n <h4 className=\"text-sm font-medium text-text-secondary\">Description</h4>\n <p className=\"text-sm mt-1\">{change.description}</p>\n </div>\n <Separator />\n <div className=\"grid grid-cols-2 gap-4 text-sm\">\n <div>\n <span className=\"text-text-secondary\">Scheduled Start</span>\n <p className=\"font-medium\">{new Date(change.scheduledStart).toLocaleString()}</p>\n </div>\n <div>\n <span className=\"text-text-secondary\">Scheduled End</span>\n <p className=\"font-medium\">{new Date(change.scheduledEnd).toLocaleString()}</p>\n </div>\n </div>\n <Separator />\n <div>\n <h4 className=\"text-sm font-medium text-text-secondary mb-2\">Affected Assets</h4>\n <div className=\"space-y-2\">\n {affectedAssetDetails.map((a) => (\n <div key={a.id} className=\"flex items-center justify-between rounded border p-2\">\n <div>\n <p className=\"text-sm font-medium\">{a.name}</p>\n <p className=\"text-xs text-text-secondary\">{a.assetTag}</p>\n </div>\n <Badge variant=\"outline\">{a.status.replace('_', ' ')}</Badge>\n </div>\n ))}\n </div>\n </div>\n </CardContent>\n </EmphasisPanel>\n\n <div className=\"space-y-4\">\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">Properties</CardTitle>\n </CardHeader>\n <CardContent>\n <dl className=\"space-y-3 text-sm\">\n <div className=\"flex justify-between\">\n <dt className=\"text-text-secondary\">Type</dt>\n <dd className=\"font-medium capitalize\">{change.type}</dd>\n </div>\n <div className=\"flex justify-between\">\n <dt className=\"text-text-secondary\">Risk</dt>\n <dd>\n <Badge variant={riskColors[change.risk]}>{change.risk}</Badge>\n </dd>\n </div>\n <div className=\"flex justify-between\">\n <dt className=\"text-text-secondary\">Status</dt>\n <dd>\n <Badge variant=\"outline\">{change.status.replace('_', ' ')}</Badge>\n </dd>\n </div>\n <Separator />\n <div className=\"flex justify-between\">\n <dt className=\"text-text-secondary\">Requested By</dt>\n <dd className=\"text-xs\">{change.requestedBy}</dd>\n </div>\n <div className=\"flex justify-between\">\n <dt className=\"text-text-secondary\">Assigned To</dt>\n <dd className=\"text-xs\">{change.assignedTo}</dd>\n </div>\n <div className=\"flex justify-between\">\n <dt className=\"text-text-secondary\">Created</dt>\n <dd className=\"text-xs\">{new Date(change.createdAt).toLocaleDateString()}</dd>\n </div>\n </dl>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">Approvals</CardTitle>\n </CardHeader>\n <CardContent>\n {change.approvals.length === 0 ? (\n <p className=\"text-sm text-text-secondary text-center py-4\">No approvals yet</p>\n ) : (\n <div className=\"space-y-2\">\n {change.approvals.map((approval, i) => (\n <div key={i} className=\"flex items-center justify-between rounded border p-2\">\n <div className=\"flex items-center gap-2\">\n {approval.status === 'approved' ? (\n <CheckCircle className=\"h-4 w-4 text-status-success-text\" />\n ) : (\n <XCircle className=\"h-4 w-4 text-status-error-text\" />\n )}\n <span className=\"text-sm\">{approval.name}</span>\n </div>\n <span className=\"text-xs text-text-secondary\">\n {new Date(approval.date).toLocaleDateString()}\n </span>\n </div>\n ))}\n </div>\n )}\n </CardContent>\n </Card>\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ItilChangeDetailPage.js","names":[],"sources":["../../../src/assethandler/pages/ItilChangeDetailPage.tsx"],"sourcesContent":["import { useAssetHandlerNavigate } from '../hooks/useAssetHandlerNavigate';\nimport {\n Badge,\n Button,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n Separator,\n GradientText,\n EmphasisPanel,\n PagePurpose,\n NextSteps,\n IllustratedEmptyState,\n} from '@burdenoff/fe-libs/ui';\nimport { ArrowLeft, CheckCircle, XCircle } from 'lucide-react';\nimport { useParams } from 'react-router-dom';\nimport { useAssetHandlerStore } from '../store/assethandlerStore';\n\nconst riskColors: Record<string, 'destructive' | 'default' | 'secondary' | 'outline'> = {\n critical: 'destructive',\n high: 'destructive',\n medium: 'default',\n low: 'secondary',\n};\n\nexport function ItilChangeDetailPage() {\n const navigate = useAssetHandlerNavigate();\n const { changeId } = useParams<{ changeId: string }>();\n const { changeRequests, assets } = useAssetHandlerStore();\n const change = changeRequests.find((item) => item.id === changeId) ?? changeRequests[0];\n\n if (!change)\n return (\n <div className=\"p-6\">\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title=\"Change request not found\"\n description=\"This change may have been completed or removed. Return to change management to find it.\"\n action={\n <Button size=\"sm\" onClick={() => navigate('/itil/change-management')}>\n Back to changes\n </Button>\n }\n />\n </div>\n );\n\n const affectedAssetDetails = assets.filter((a) => change.affectedAssets.includes(a.id));\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-4\">\n <Button variant=\"ghost\" size=\"icon\" onClick={() => navigate('/itil/change-management')}>\n <ArrowLeft className=\"h-4 w-4\" />\n </Button>\n <div>\n <div className=\"flex items-center gap-3\">\n <h1 className=\"text-2xl font-bold\">\n <GradientText>{change.id}</GradientText>\n </h1>\n <Badge\n variant={change.type === 'emergency' ? 'destructive' : 'outline'}\n className=\"capitalize\"\n >\n {change.type}\n </Badge>\n <Badge variant={riskColors[change.risk]}>Risk: {change.risk}</Badge>\n <Badge variant=\"outline\">{change.status.replace('_', ' ')}</Badge>\n </div>\n <p className=\"text-sm text-text-secondary mt-1\">{change.title}</p>\n </div>\n </div>\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\">\n Reject\n </Button>\n <Button size=\"sm\">\n <CheckCircle className=\"mr-2 h-4 w-4\" />\n Approve\n </Button>\n </div>\n </div>\n\n <PagePurpose>\n The full record of a single planned change: what is changing, its risk and schedule, which\n assets it touches, and where it stands in the approval chain. Use this page to approve,\n reject or track a change so it lands safely in its agreed window.\n </PagePurpose>\n\n <NextSteps\n storageKey=\"assethandler-change-detail\"\n steps={[\n {\n id: 'approve',\n label: 'Approve or reject this change',\n description: 'Sign off on the change once you have reviewed its risk.',\n done: change.status === 'approved' || change.status === 'completed',\n },\n {\n id: 'assets',\n label: 'Review affected assets',\n description: 'Confirm the blast radius before the change window.',\n onClick: () => navigate('/assets/asset-list'),\n },\n {\n id: 'calendar',\n label: 'Check the maintenance calendar',\n description: 'Make sure the schedule does not clash with other work.',\n onClick: () => navigate('/maintenance/maintenance-calendar'),\n },\n ]}\n />\n\n <div className=\"grid gap-6 lg:grid-cols-3\">\n <EmphasisPanel className=\"lg:col-span-2\">\n <CardHeader className=\"px-0 pt-0\">\n <CardTitle>Change Details</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4 px-0 pb-0\">\n <div>\n <h4 className=\"text-sm font-medium text-text-secondary\">Description</h4>\n <p className=\"text-sm mt-1\">{change.description}</p>\n </div>\n <Separator />\n <div className=\"grid grid-cols-2 gap-4 text-sm\">\n <div>\n <span className=\"text-text-secondary\">Scheduled Start</span>\n <p className=\"font-medium\">{new Date(change.scheduledStart).toLocaleString()}</p>\n </div>\n <div>\n <span className=\"text-text-secondary\">Scheduled End</span>\n <p className=\"font-medium\">{new Date(change.scheduledEnd).toLocaleString()}</p>\n </div>\n </div>\n <Separator />\n <div>\n <h4 className=\"text-sm font-medium text-text-secondary mb-2\">Affected Assets</h4>\n <div className=\"space-y-2\">\n {affectedAssetDetails.map((a) => (\n <div key={a.id} className=\"flex items-center justify-between rounded border p-2\">\n <div>\n <p className=\"text-sm font-medium\">{a.name}</p>\n <p className=\"text-xs text-text-secondary\">{a.assetTag}</p>\n </div>\n <Badge variant=\"outline\">{a.status.replace('_', ' ')}</Badge>\n </div>\n ))}\n </div>\n </div>\n </CardContent>\n </EmphasisPanel>\n\n <div className=\"space-y-4\">\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">Properties</CardTitle>\n </CardHeader>\n <CardContent>\n <dl className=\"space-y-3 text-sm\">\n <div className=\"flex justify-between\">\n <dt className=\"text-text-secondary\">Type</dt>\n <dd className=\"font-medium capitalize\">{change.type}</dd>\n </div>\n <div className=\"flex justify-between\">\n <dt className=\"text-text-secondary\">Risk</dt>\n <dd>\n <Badge variant={riskColors[change.risk]}>{change.risk}</Badge>\n </dd>\n </div>\n <div className=\"flex justify-between\">\n <dt className=\"text-text-secondary\">Status</dt>\n <dd>\n <Badge variant=\"outline\">{change.status.replace('_', ' ')}</Badge>\n </dd>\n </div>\n <Separator />\n <div className=\"flex justify-between\">\n <dt className=\"text-text-secondary\">Requested By</dt>\n <dd className=\"text-xs\">{change.requestedBy}</dd>\n </div>\n <div className=\"flex justify-between\">\n <dt className=\"text-text-secondary\">Assigned To</dt>\n <dd className=\"text-xs\">{change.assignedTo}</dd>\n </div>\n <div className=\"flex justify-between\">\n <dt className=\"text-text-secondary\">Created</dt>\n <dd className=\"text-xs\">{new Date(change.createdAt).toLocaleDateString()}</dd>\n </div>\n </dl>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">Approvals</CardTitle>\n </CardHeader>\n <CardContent>\n {change.approvals.length === 0 ? (\n <p className=\"text-sm text-text-secondary text-center py-4\">No approvals yet</p>\n ) : (\n <div className=\"space-y-2\">\n {change.approvals.map((approval, i) => (\n <div key={i} className=\"flex items-center justify-between rounded border p-2\">\n <div className=\"flex items-center gap-2\">\n {approval.status === 'approved' ? (\n <CheckCircle className=\"h-4 w-4 text-status-success-text\" />\n ) : (\n <XCircle className=\"h-4 w-4 text-status-error-text\" />\n )}\n <span className=\"text-sm\">{approval.name}</span>\n </div>\n <span className=\"text-xs text-text-secondary\">\n {new Date(approval.date).toLocaleDateString()}\n </span>\n </div>\n ))}\n </div>\n )}\n </CardContent>\n </Card>\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { useAssetHandlerStore as e } from "../store/assethandlerStore.js";
2
2
  import { Plus as t } from "lucide-react";
3
- import { Badge as n, Button as r, Card as i, CardContent as a, EmphasisPanel as o, GradientText as s, IllustratedEmptyState as c, PagePurpose as l } from "@burdenoff/fe-libs/ui";
4
- import { jsx as u, jsxs as d } from "react/jsx-runtime";
3
+ import { jsx as n, jsxs as r } from "react/jsx-runtime";
4
+ import { Badge as i, Button as a, Card as o, CardContent as s, EmphasisPanel as c, GradientText as l, IllustratedEmptyState as u, PagePurpose as d } from "@burdenoff/fe-libs/ui";
5
5
  //#region src/assethandler/pages/ItilChangeManagementPage.tsx
6
6
  var f = {
7
7
  critical: "destructive",
@@ -11,159 +11,159 @@ var f = {
11
11
  };
12
12
  function p() {
13
13
  let { changeRequests: p } = e();
14
- return /* @__PURE__ */ d("div", {
14
+ return /* @__PURE__ */ r("div", {
15
15
  className: "space-y-6 p-6",
16
16
  children: [
17
- /* @__PURE__ */ d("div", {
17
+ /* @__PURE__ */ r("div", {
18
18
  className: "flex items-center justify-between",
19
- children: [/* @__PURE__ */ d("div", { children: [/* @__PURE__ */ u("h1", {
19
+ children: [/* @__PURE__ */ r("div", { children: [/* @__PURE__ */ n("h1", {
20
20
  className: "text-2xl font-bold",
21
- children: /* @__PURE__ */ u(s, { children: "Change Management" })
22
- }), /* @__PURE__ */ d("p", {
21
+ children: /* @__PURE__ */ n(l, { children: "Change Management" })
22
+ }), /* @__PURE__ */ r("p", {
23
23
  className: "text-sm text-text-secondary",
24
24
  children: [p.length, " change requests"]
25
- })] }), /* @__PURE__ */ d(r, {
25
+ })] }), /* @__PURE__ */ r(a, {
26
26
  size: "sm",
27
- children: [/* @__PURE__ */ u(t, { className: "mr-2 h-4 w-4" }), "New Change Request"]
27
+ children: [/* @__PURE__ */ n(t, { className: "mr-2 h-4 w-4" }), "New Change Request"]
28
28
  })]
29
29
  }),
30
- /* @__PURE__ */ u(l, { children: "Plan and govern every change to your assets and services so nothing breaks unexpectedly. Capture the change, assess its risk, route it for approval, and schedule it for a safe window — giving you a controlled, auditable trail of what changed, when and why." }),
31
- /* @__PURE__ */ d("div", {
30
+ /* @__PURE__ */ n(d, { children: "Plan and govern every change to your assets and services so nothing breaks unexpectedly. Capture the change, assess its risk, route it for approval, and schedule it for a safe window — giving you a controlled, auditable trail of what changed, when and why." }),
31
+ /* @__PURE__ */ r("div", {
32
32
  className: "grid gap-4 md:grid-cols-4",
33
33
  children: [
34
- /* @__PURE__ */ d(o, { children: [/* @__PURE__ */ u("p", {
34
+ /* @__PURE__ */ r(c, { children: [/* @__PURE__ */ n("p", {
35
35
  className: "text-sm text-text-secondary",
36
36
  children: "Total"
37
- }), /* @__PURE__ */ u("p", {
37
+ }), /* @__PURE__ */ n("p", {
38
38
  className: "text-2xl font-bold tabular-nums",
39
39
  children: p.length
40
40
  })] }),
41
- /* @__PURE__ */ u(i, { children: /* @__PURE__ */ d(a, {
41
+ /* @__PURE__ */ n(o, { children: /* @__PURE__ */ r(s, {
42
42
  className: "pt-4",
43
- children: [/* @__PURE__ */ u("p", {
43
+ children: [/* @__PURE__ */ n("p", {
44
44
  className: "text-sm text-text-secondary",
45
45
  children: "Approved"
46
- }), /* @__PURE__ */ u("p", {
46
+ }), /* @__PURE__ */ n("p", {
47
47
  className: "text-2xl font-bold text-status-success-text",
48
48
  children: p.filter((e) => e.status === "approved").length
49
49
  })]
50
50
  }) }),
51
- /* @__PURE__ */ u(i, { children: /* @__PURE__ */ d(a, {
51
+ /* @__PURE__ */ n(o, { children: /* @__PURE__ */ r(s, {
52
52
  className: "pt-4",
53
- children: [/* @__PURE__ */ u("p", {
53
+ children: [/* @__PURE__ */ n("p", {
54
54
  className: "text-sm text-text-secondary",
55
55
  children: "Submitted"
56
- }), /* @__PURE__ */ u("p", {
56
+ }), /* @__PURE__ */ n("p", {
57
57
  className: "text-2xl font-bold text-status-info-text",
58
58
  children: p.filter((e) => e.status === "submitted").length
59
59
  })]
60
60
  }) }),
61
- /* @__PURE__ */ u(i, { children: /* @__PURE__ */ d(a, {
61
+ /* @__PURE__ */ n(o, { children: /* @__PURE__ */ r(s, {
62
62
  className: "pt-4",
63
- children: [/* @__PURE__ */ u("p", {
63
+ children: [/* @__PURE__ */ n("p", {
64
64
  className: "text-sm text-text-secondary",
65
65
  children: "Completed"
66
- }), /* @__PURE__ */ u("p", {
66
+ }), /* @__PURE__ */ n("p", {
67
67
  className: "text-2xl font-bold tabular-nums",
68
68
  children: p.filter((e) => e.status === "completed").length
69
69
  })]
70
70
  }) })
71
71
  ]
72
72
  }),
73
- p.length === 0 ? /* @__PURE__ */ u(c, {
73
+ p.length === 0 ? /* @__PURE__ */ n(u, {
74
74
  illustration: "empty-generic",
75
75
  title: "No change requests",
76
76
  description: "Raise a change request to plan and risk-assess updates to your assets."
77
- }) : /* @__PURE__ */ u(i, { children: /* @__PURE__ */ u(a, {
77
+ }) : /* @__PURE__ */ n(o, { children: /* @__PURE__ */ n(s, {
78
78
  className: "p-0",
79
- children: /* @__PURE__ */ u("div", {
79
+ children: /* @__PURE__ */ n("div", {
80
80
  className: "overflow-x-auto",
81
- children: /* @__PURE__ */ d("table", {
81
+ children: /* @__PURE__ */ r("table", {
82
82
  className: "w-full text-sm",
83
- children: [/* @__PURE__ */ u("thead", { children: /* @__PURE__ */ d("tr", {
83
+ children: [/* @__PURE__ */ n("thead", { children: /* @__PURE__ */ r("tr", {
84
84
  className: "border-b bg-bg-sunken/50",
85
85
  children: [
86
- /* @__PURE__ */ u("th", {
86
+ /* @__PURE__ */ n("th", {
87
87
  className: "text-left p-3 font-medium",
88
88
  children: "ID"
89
89
  }),
90
- /* @__PURE__ */ u("th", {
90
+ /* @__PURE__ */ n("th", {
91
91
  className: "text-left p-3 font-medium",
92
92
  children: "Title"
93
93
  }),
94
- /* @__PURE__ */ u("th", {
94
+ /* @__PURE__ */ n("th", {
95
95
  className: "text-left p-3 font-medium",
96
96
  children: "Type"
97
97
  }),
98
- /* @__PURE__ */ u("th", {
98
+ /* @__PURE__ */ n("th", {
99
99
  className: "text-left p-3 font-medium",
100
100
  children: "Risk"
101
101
  }),
102
- /* @__PURE__ */ u("th", {
102
+ /* @__PURE__ */ n("th", {
103
103
  className: "text-left p-3 font-medium",
104
104
  children: "Status"
105
105
  }),
106
- /* @__PURE__ */ u("th", {
106
+ /* @__PURE__ */ n("th", {
107
107
  className: "text-left p-3 font-medium",
108
108
  children: "Requested By"
109
109
  }),
110
- /* @__PURE__ */ u("th", {
110
+ /* @__PURE__ */ n("th", {
111
111
  className: "text-left p-3 font-medium",
112
112
  children: "Scheduled"
113
113
  }),
114
- /* @__PURE__ */ u("th", {
114
+ /* @__PURE__ */ n("th", {
115
115
  className: "text-left p-3 font-medium",
116
116
  children: "Approvals"
117
117
  })
118
118
  ]
119
- }) }), /* @__PURE__ */ u("tbody", { children: p.map((e) => /* @__PURE__ */ d("tr", {
119
+ }) }), /* @__PURE__ */ n("tbody", { children: p.map((e) => /* @__PURE__ */ r("tr", {
120
120
  className: "border-b hover:bg-bg-sunken/50 cursor-pointer",
121
121
  children: [
122
- /* @__PURE__ */ u("td", {
122
+ /* @__PURE__ */ n("td", {
123
123
  className: "p-3 font-mono text-xs",
124
124
  children: e.id
125
125
  }),
126
- /* @__PURE__ */ d("td", {
126
+ /* @__PURE__ */ r("td", {
127
127
  className: "p-3",
128
- children: [/* @__PURE__ */ u("p", {
128
+ children: [/* @__PURE__ */ n("p", {
129
129
  className: "font-medium",
130
130
  children: e.title
131
- }), /* @__PURE__ */ u("p", {
131
+ }), /* @__PURE__ */ n("p", {
132
132
  className: "text-xs text-text-secondary truncate max-w-xs",
133
133
  children: e.description
134
134
  })]
135
135
  }),
136
- /* @__PURE__ */ u("td", {
136
+ /* @__PURE__ */ n("td", {
137
137
  className: "p-3",
138
- children: /* @__PURE__ */ u(n, {
138
+ children: /* @__PURE__ */ n(i, {
139
139
  variant: e.type === "emergency" ? "destructive" : "outline",
140
140
  className: "capitalize",
141
141
  children: e.type
142
142
  })
143
143
  }),
144
- /* @__PURE__ */ u("td", {
144
+ /* @__PURE__ */ n("td", {
145
145
  className: "p-3",
146
- children: /* @__PURE__ */ u(n, {
146
+ children: /* @__PURE__ */ n(i, {
147
147
  variant: f[e.risk],
148
148
  children: e.risk
149
149
  })
150
150
  }),
151
- /* @__PURE__ */ u("td", {
151
+ /* @__PURE__ */ n("td", {
152
152
  className: "p-3",
153
- children: /* @__PURE__ */ u(n, {
153
+ children: /* @__PURE__ */ n(i, {
154
154
  variant: "outline",
155
155
  children: e.status.replace("_", " ")
156
156
  })
157
157
  }),
158
- /* @__PURE__ */ u("td", {
158
+ /* @__PURE__ */ n("td", {
159
159
  className: "p-3 text-xs",
160
160
  children: e.requestedBy
161
161
  }),
162
- /* @__PURE__ */ u("td", {
162
+ /* @__PURE__ */ n("td", {
163
163
  className: "p-3 text-xs",
164
164
  children: new Date(e.scheduledStart).toLocaleDateString()
165
165
  }),
166
- /* @__PURE__ */ u("td", {
166
+ /* @__PURE__ */ n("td", {
167
167
  className: "p-3 text-xs",
168
168
  children: e.approvals.length > 0 ? e.approvals.map((e) => e.status).join(", ") : "Pending"
169
169
  })