@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,18 +1,19 @@
1
1
  import { useAssetHandlerStore as e } from "../store/assethandlerStore.js";
2
- import { ArrowLeft as t, CheckCircle as n } from "lucide-react";
3
- import { useNavigate as r, useParams as i } from "react-router-dom";
4
- import { Badge as a, Button as o, Card as s, CardContent as c, CardHeader as l, CardTitle as u, EmphasisPanel as d, GradientText as f, IllustratedEmptyState as p, NextSteps as m, PagePurpose as h, Separator as g } from "@burdenoff/fe-libs/ui";
5
- import { jsx as _, jsxs as v } from "react/jsx-runtime";
2
+ import { useAssetHandlerNavigate as t } from "../hooks/useAssetHandlerNavigate.js";
3
+ import { ArrowLeft as n, CheckCircle as r } from "lucide-react";
4
+ import { useParams as i } from "react-router-dom";
5
+ import { jsx as a, jsxs as o } from "react/jsx-runtime";
6
+ import { Badge as s, Button as c, Card as l, CardContent as u, CardHeader as d, CardTitle as f, EmphasisPanel as p, GradientText as m, IllustratedEmptyState as h, NextSteps as g, PagePurpose as _, Separator as v } from "@burdenoff/fe-libs/ui";
6
7
  //#region src/assethandler/pages/OperationsMaintenanceDetailPage.tsx
7
8
  function y() {
8
- let y = r(), { maintenanceId: b } = i(), { maintenanceRecords: x } = e(), S = x.find((e) => e.id === b) ?? x[0];
9
- if (!S) return /* @__PURE__ */ _("div", {
9
+ let y = t(), { maintenanceId: b } = i(), { maintenanceRecords: x } = e(), S = x.find((e) => e.id === b) ?? x[0];
10
+ if (!S) return /* @__PURE__ */ a("div", {
10
11
  className: "p-6",
11
- children: /* @__PURE__ */ _(p, {
12
+ children: /* @__PURE__ */ a(h, {
12
13
  illustration: "empty-search",
13
14
  title: "Maintenance record not found",
14
15
  description: "This record may have been completed or removed. Return to the operations hub to find it.",
15
- action: /* @__PURE__ */ _(o, {
16
+ action: /* @__PURE__ */ a(c, {
16
17
  size: "sm",
17
18
  onClick: () => y("/operations/operations-hub"),
18
19
  children: "Back to operations"
@@ -20,45 +21,45 @@ function y() {
20
21
  })
21
22
  });
22
23
  let C = S.checklist.filter((e) => e.completed).length;
23
- return /* @__PURE__ */ v("div", {
24
+ return /* @__PURE__ */ o("div", {
24
25
  className: "space-y-6 p-6",
25
26
  children: [
26
- /* @__PURE__ */ v("div", {
27
+ /* @__PURE__ */ o("div", {
27
28
  className: "flex items-center justify-between",
28
- children: [/* @__PURE__ */ v("div", {
29
+ children: [/* @__PURE__ */ o("div", {
29
30
  className: "flex items-center gap-4",
30
- children: [/* @__PURE__ */ _(o, {
31
+ children: [/* @__PURE__ */ a(c, {
31
32
  variant: "ghost",
32
33
  size: "icon",
33
34
  onClick: () => y("/operations/operations-hub"),
34
- children: /* @__PURE__ */ _(t, { className: "h-4 w-4" })
35
- }), /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ v("div", {
35
+ children: /* @__PURE__ */ a(n, { className: "h-4 w-4" })
36
+ }), /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ o("div", {
36
37
  className: "flex items-center gap-3",
37
38
  children: [
38
- /* @__PURE__ */ _("h1", {
39
+ /* @__PURE__ */ a("h1", {
39
40
  className: "text-2xl font-bold",
40
- children: /* @__PURE__ */ _(f, { children: S.id })
41
+ children: /* @__PURE__ */ a(m, { children: S.id })
41
42
  }),
42
- /* @__PURE__ */ _(a, {
43
+ /* @__PURE__ */ a(s, {
43
44
  variant: "outline",
44
45
  children: S.type
45
46
  }),
46
- /* @__PURE__ */ _(a, {
47
+ /* @__PURE__ */ a(s, {
47
48
  variant: S.status === "completed" ? "default" : "secondary",
48
49
  children: S.status.replace("_", " ")
49
50
  })
50
51
  ]
51
- }), /* @__PURE__ */ _("p", {
52
+ }), /* @__PURE__ */ a("p", {
52
53
  className: "text-sm text-text-secondary mt-1",
53
54
  children: S.title
54
55
  })] })]
55
- }), /* @__PURE__ */ v(o, {
56
+ }), /* @__PURE__ */ o(c, {
56
57
  size: "sm",
57
- children: [/* @__PURE__ */ _(n, { className: "mr-2 h-4 w-4" }), "Complete"]
58
+ children: [/* @__PURE__ */ a(r, { className: "mr-2 h-4 w-4" }), "Complete"]
58
59
  })]
59
60
  }),
60
- /* @__PURE__ */ _(h, { children: "Everything needed to carry out and sign off a single maintenance job: the asset, the schedule, the step-by-step checklist and live progress. Work through the checklist, log notes and mark it complete so the asset's service history stays accurate." }),
61
- /* @__PURE__ */ _(m, {
61
+ /* @__PURE__ */ a(_, { children: "Everything needed to carry out and sign off a single maintenance job: the asset, the schedule, the step-by-step checklist and live progress. Work through the checklist, log notes and mark it complete so the asset's service history stays accurate." }),
62
+ /* @__PURE__ */ a(g, {
62
63
  storageKey: "assethandler-maintenance-detail",
63
64
  steps: [
64
65
  {
@@ -81,73 +82,73 @@ function y() {
81
82
  }
82
83
  ]
83
84
  }),
84
- /* @__PURE__ */ v("div", {
85
+ /* @__PURE__ */ o("div", {
85
86
  className: "grid gap-6 lg:grid-cols-3",
86
- children: [/* @__PURE__ */ v(d, {
87
+ children: [/* @__PURE__ */ o(p, {
87
88
  className: "lg:col-span-2",
88
- children: [/* @__PURE__ */ _(l, {
89
+ children: [/* @__PURE__ */ a(d, {
89
90
  className: "px-0 pt-0",
90
- children: /* @__PURE__ */ _(u, { children: "Details" })
91
- }), /* @__PURE__ */ v(c, {
91
+ children: /* @__PURE__ */ a(f, { children: "Details" })
92
+ }), /* @__PURE__ */ o(u, {
92
93
  className: "space-y-4 px-0 pb-0",
93
94
  children: [
94
- /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("h4", {
95
+ /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("h4", {
95
96
  className: "text-sm font-medium text-text-secondary",
96
97
  children: "Description"
97
- }), /* @__PURE__ */ _("p", {
98
+ }), /* @__PURE__ */ a("p", {
98
99
  className: "text-sm mt-1",
99
100
  children: S.description
100
101
  })] }),
101
- /* @__PURE__ */ _(g, {}),
102
- /* @__PURE__ */ v("div", {
102
+ /* @__PURE__ */ a(v, {}),
103
+ /* @__PURE__ */ o("div", {
103
104
  className: "grid grid-cols-2 gap-4 text-sm",
104
105
  children: [
105
- /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("span", {
106
+ /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("span", {
106
107
  className: "text-text-secondary",
107
108
  children: "Asset"
108
- }), /* @__PURE__ */ _("p", {
109
+ }), /* @__PURE__ */ a("p", {
109
110
  className: "font-medium",
110
111
  children: S.assetId
111
112
  })] }),
112
- /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("span", {
113
+ /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("span", {
113
114
  className: "text-text-secondary",
114
115
  children: "Type"
115
- }), /* @__PURE__ */ _("p", {
116
+ }), /* @__PURE__ */ a("p", {
116
117
  className: "font-medium capitalize",
117
118
  children: S.type
118
119
  })] }),
119
- /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("span", {
120
+ /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("span", {
120
121
  className: "text-text-secondary",
121
122
  children: "Scheduled"
122
- }), /* @__PURE__ */ _("p", {
123
+ }), /* @__PURE__ */ a("p", {
123
124
  className: "font-medium",
124
125
  children: S.scheduledDate ? new Date(S.scheduledDate).toLocaleDateString() : "Not scheduled"
125
126
  })] }),
126
- /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("span", {
127
+ /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("span", {
127
128
  className: "text-text-secondary",
128
129
  children: "Completed"
129
- }), /* @__PURE__ */ _("p", {
130
+ }), /* @__PURE__ */ a("p", {
130
131
  className: "font-medium",
131
132
  children: S.completedDate ? new Date(S.completedDate).toLocaleDateString() : "—"
132
133
  })] }),
133
- S.estimatedCost != null && /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("span", {
134
+ S.estimatedCost != null && /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("span", {
134
135
  className: "text-text-secondary",
135
136
  children: "Estimated Cost"
136
- }), /* @__PURE__ */ v("p", {
137
+ }), /* @__PURE__ */ o("p", {
137
138
  className: "font-medium",
138
139
  children: ["$", S.estimatedCost.toLocaleString()]
139
140
  })] }),
140
- S.actualCost != null && /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("span", {
141
+ S.actualCost != null && /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("span", {
141
142
  className: "text-text-secondary",
142
143
  children: "Actual Cost"
143
- }), /* @__PURE__ */ v("p", {
144
+ }), /* @__PURE__ */ o("p", {
144
145
  className: "font-medium",
145
146
  children: ["$", S.actualCost.toLocaleString()]
146
147
  })] })
147
148
  ]
148
149
  }),
149
- /* @__PURE__ */ _(g, {}),
150
- /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ v("h4", {
150
+ /* @__PURE__ */ a(v, {}),
151
+ /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ o("h4", {
151
152
  className: "text-sm font-medium text-text-secondary mb-3",
152
153
  children: [
153
154
  "Checklist (",
@@ -156,14 +157,14 @@ function y() {
156
157
  S.checklist.length,
157
158
  ")"
158
159
  ]
159
- }), /* @__PURE__ */ _("div", {
160
+ }), /* @__PURE__ */ a("div", {
160
161
  className: "space-y-2",
161
- children: S.checklist.map((e, t) => /* @__PURE__ */ v("div", {
162
+ children: S.checklist.map((e, t) => /* @__PURE__ */ o("div", {
162
163
  className: "flex items-center gap-3 rounded border p-2.5",
163
- children: [/* @__PURE__ */ _("div", {
164
+ children: [/* @__PURE__ */ a("div", {
164
165
  className: `h-4 w-4 rounded border-2 flex items-center justify-center ${e.completed ? "bg-action-primary-bg border-primary" : "border-muted-foreground"}`,
165
- children: e.completed && /* @__PURE__ */ _(n, { className: "h-3 w-3 text-action-primary-text" })
166
- }), /* @__PURE__ */ _("span", {
166
+ children: e.completed && /* @__PURE__ */ a(r, { className: "h-3 w-3 text-action-primary-text" })
167
+ }), /* @__PURE__ */ a("span", {
167
168
  className: `text-sm ${e.completed ? "line-through text-text-secondary" : ""}`,
168
169
  children: e.task
169
170
  })]
@@ -171,21 +172,21 @@ function y() {
171
172
  })] })
172
173
  ]
173
174
  })]
174
- }), /* @__PURE__ */ v(s, { children: [/* @__PURE__ */ _(l, { children: /* @__PURE__ */ _(u, {
175
+ }), /* @__PURE__ */ o(l, { children: [/* @__PURE__ */ a(d, { children: /* @__PURE__ */ a(f, {
175
176
  className: "text-base",
176
177
  children: "Progress"
177
- }) }), /* @__PURE__ */ v(c, { children: [/* @__PURE__ */ v("div", {
178
+ }) }), /* @__PURE__ */ o(u, { children: [/* @__PURE__ */ o("div", {
178
179
  className: "text-center mb-4",
179
- children: [/* @__PURE__ */ v("p", {
180
+ children: [/* @__PURE__ */ o("p", {
180
181
  className: "text-4xl font-bold",
181
182
  children: [Math.round(C / S.checklist.length * 100), "%"]
182
- }), /* @__PURE__ */ _("p", {
183
+ }), /* @__PURE__ */ a("p", {
183
184
  className: "text-sm text-text-secondary",
184
185
  children: "Complete"
185
186
  })]
186
- }), /* @__PURE__ */ _("div", {
187
+ }), /* @__PURE__ */ a("div", {
187
188
  className: "h-3 rounded-full bg-bg-sunken overflow-hidden",
188
- children: /* @__PURE__ */ _("div", {
189
+ children: /* @__PURE__ */ a("div", {
189
190
  className: "h-full rounded-full bg-action-primary-bg transition-all",
190
191
  style: { width: `${C / S.checklist.length * 100}%` }
191
192
  })
@@ -1 +1 @@
1
- {"version":3,"file":"OperationsMaintenanceDetailPage.js","names":[],"sources":["../../../src/assethandler/pages/OperationsMaintenanceDetailPage.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 } from 'lucide-react';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport { useAssetHandlerStore } from '../store/assethandlerStore';\n\nexport function OperationsMaintenanceDetailPage() {\n const navigate = useNavigate();\n const { maintenanceId } = useParams<{ maintenanceId: string }>();\n const { maintenanceRecords } = useAssetHandlerStore();\n const record =\n maintenanceRecords.find((item) => item.id === maintenanceId) ?? maintenanceRecords[0];\n\n if (!record)\n return (\n <div className=\"p-6\">\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title=\"Maintenance record not found\"\n description=\"This record may have been completed or removed. Return to the operations hub to find it.\"\n action={\n <Button size=\"sm\" onClick={() => navigate('/operations/operations-hub')}>\n Back to operations\n </Button>\n }\n />\n </div>\n );\n\n const completedTasks = record.checklist.filter((c) => c.completed).length;\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\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => navigate('/operations/operations-hub')}\n >\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>{record.id}</GradientText>\n </h1>\n <Badge variant=\"outline\">{record.type}</Badge>\n <Badge variant={record.status === 'completed' ? 'default' : 'secondary'}>\n {record.status.replace('_', ' ')}\n </Badge>\n </div>\n <p className=\"text-sm text-text-secondary mt-1\">{record.title}</p>\n </div>\n </div>\n <Button size=\"sm\">\n <CheckCircle className=\"mr-2 h-4 w-4\" />\n Complete\n </Button>\n </div>\n\n <PagePurpose>\n Everything needed to carry out and sign off a single maintenance job: the asset, the\n schedule, the step-by-step checklist and live progress. Work through the checklist, log\n notes and mark it complete so the asset&apos;s service history stays accurate.\n </PagePurpose>\n\n <NextSteps\n storageKey=\"assethandler-maintenance-detail\"\n steps={[\n {\n id: 'complete',\n label: 'Work through the checklist',\n description: 'Tick off each task, then mark the job complete.',\n done: record.status === 'completed',\n },\n {\n id: 'asset',\n label: 'Open the related asset',\n description: 'Review the asset this maintenance is for.',\n onClick: () => navigate('/assets/asset-list'),\n },\n {\n id: 'calendar',\n label: 'View the maintenance calendar',\n description: 'See how this fits with other scheduled 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>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\">{record.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\">Asset</span>\n <p className=\"font-medium\">{record.assetId}</p>\n </div>\n <div>\n <span className=\"text-text-secondary\">Type</span>\n <p className=\"font-medium capitalize\">{record.type}</p>\n </div>\n <div>\n <span className=\"text-text-secondary\">Scheduled</span>\n <p className=\"font-medium\">\n {record.scheduledDate\n ? new Date(record.scheduledDate).toLocaleDateString()\n : 'Not scheduled'}\n </p>\n </div>\n <div>\n <span className=\"text-text-secondary\">Completed</span>\n <p className=\"font-medium\">\n {record.completedDate ? new Date(record.completedDate).toLocaleDateString() : '—'}\n </p>\n </div>\n {record.estimatedCost != null && (\n <div>\n <span className=\"text-text-secondary\">Estimated Cost</span>\n <p className=\"font-medium\">${record.estimatedCost.toLocaleString()}</p>\n </div>\n )}\n {record.actualCost != null && (\n <div>\n <span className=\"text-text-secondary\">Actual Cost</span>\n <p className=\"font-medium\">${record.actualCost.toLocaleString()}</p>\n </div>\n )}\n </div>\n <Separator />\n <div>\n <h4 className=\"text-sm font-medium text-text-secondary mb-3\">\n Checklist ({completedTasks}/{record.checklist.length})\n </h4>\n <div className=\"space-y-2\">\n {record.checklist.map((item, i) => (\n <div key={i} className=\"flex items-center gap-3 rounded border p-2.5\">\n <div\n className={`h-4 w-4 rounded border-2 flex items-center justify-center ${item.completed ? 'bg-action-primary-bg border-primary' : 'border-muted-foreground'}`}\n >\n {item.completed && (\n <CheckCircle className=\"h-3 w-3 text-action-primary-text\" />\n )}\n </div>\n <span\n className={`text-sm ${item.completed ? 'line-through text-text-secondary' : ''}`}\n >\n {item.task}\n </span>\n </div>\n ))}\n </div>\n </div>\n </CardContent>\n </EmphasisPanel>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">Progress</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"text-center mb-4\">\n <p className=\"text-4xl font-bold\">\n {Math.round((completedTasks / record.checklist.length) * 100)}%\n </p>\n <p className=\"text-sm text-text-secondary\">Complete</p>\n </div>\n <div className=\"h-3 rounded-full bg-bg-sunken overflow-hidden\">\n <div\n className=\"h-full rounded-full bg-action-primary-bg transition-all\"\n style={{ width: `${(completedTasks / record.checklist.length) * 100}%` }}\n />\n </div>\n </CardContent>\n </Card>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"OperationsMaintenanceDetailPage.js","names":[],"sources":["../../../src/assethandler/pages/OperationsMaintenanceDetailPage.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 } from 'lucide-react';\nimport { useParams } from 'react-router-dom';\nimport { useAssetHandlerStore } from '../store/assethandlerStore';\n\nexport function OperationsMaintenanceDetailPage() {\n const navigate = useAssetHandlerNavigate();\n const { maintenanceId } = useParams<{ maintenanceId: string }>();\n const { maintenanceRecords } = useAssetHandlerStore();\n const record =\n maintenanceRecords.find((item) => item.id === maintenanceId) ?? maintenanceRecords[0];\n\n if (!record)\n return (\n <div className=\"p-6\">\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title=\"Maintenance record not found\"\n description=\"This record may have been completed or removed. Return to the operations hub to find it.\"\n action={\n <Button size=\"sm\" onClick={() => navigate('/operations/operations-hub')}>\n Back to operations\n </Button>\n }\n />\n </div>\n );\n\n const completedTasks = record.checklist.filter((c) => c.completed).length;\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\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => navigate('/operations/operations-hub')}\n >\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>{record.id}</GradientText>\n </h1>\n <Badge variant=\"outline\">{record.type}</Badge>\n <Badge variant={record.status === 'completed' ? 'default' : 'secondary'}>\n {record.status.replace('_', ' ')}\n </Badge>\n </div>\n <p className=\"text-sm text-text-secondary mt-1\">{record.title}</p>\n </div>\n </div>\n <Button size=\"sm\">\n <CheckCircle className=\"mr-2 h-4 w-4\" />\n Complete\n </Button>\n </div>\n\n <PagePurpose>\n Everything needed to carry out and sign off a single maintenance job: the asset, the\n schedule, the step-by-step checklist and live progress. Work through the checklist, log\n notes and mark it complete so the asset&apos;s service history stays accurate.\n </PagePurpose>\n\n <NextSteps\n storageKey=\"assethandler-maintenance-detail\"\n steps={[\n {\n id: 'complete',\n label: 'Work through the checklist',\n description: 'Tick off each task, then mark the job complete.',\n done: record.status === 'completed',\n },\n {\n id: 'asset',\n label: 'Open the related asset',\n description: 'Review the asset this maintenance is for.',\n onClick: () => navigate('/assets/asset-list'),\n },\n {\n id: 'calendar',\n label: 'View the maintenance calendar',\n description: 'See how this fits with other scheduled 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>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\">{record.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\">Asset</span>\n <p className=\"font-medium\">{record.assetId}</p>\n </div>\n <div>\n <span className=\"text-text-secondary\">Type</span>\n <p className=\"font-medium capitalize\">{record.type}</p>\n </div>\n <div>\n <span className=\"text-text-secondary\">Scheduled</span>\n <p className=\"font-medium\">\n {record.scheduledDate\n ? new Date(record.scheduledDate).toLocaleDateString()\n : 'Not scheduled'}\n </p>\n </div>\n <div>\n <span className=\"text-text-secondary\">Completed</span>\n <p className=\"font-medium\">\n {record.completedDate ? new Date(record.completedDate).toLocaleDateString() : '—'}\n </p>\n </div>\n {record.estimatedCost != null && (\n <div>\n <span className=\"text-text-secondary\">Estimated Cost</span>\n <p className=\"font-medium\">${record.estimatedCost.toLocaleString()}</p>\n </div>\n )}\n {record.actualCost != null && (\n <div>\n <span className=\"text-text-secondary\">Actual Cost</span>\n <p className=\"font-medium\">${record.actualCost.toLocaleString()}</p>\n </div>\n )}\n </div>\n <Separator />\n <div>\n <h4 className=\"text-sm font-medium text-text-secondary mb-3\">\n Checklist ({completedTasks}/{record.checklist.length})\n </h4>\n <div className=\"space-y-2\">\n {record.checklist.map((item, i) => (\n <div key={i} className=\"flex items-center gap-3 rounded border p-2.5\">\n <div\n className={`h-4 w-4 rounded border-2 flex items-center justify-center ${item.completed ? 'bg-action-primary-bg border-primary' : 'border-muted-foreground'}`}\n >\n {item.completed && (\n <CheckCircle className=\"h-3 w-3 text-action-primary-text\" />\n )}\n </div>\n <span\n className={`text-sm ${item.completed ? 'line-through text-text-secondary' : ''}`}\n >\n {item.task}\n </span>\n </div>\n ))}\n </div>\n </div>\n </CardContent>\n </EmphasisPanel>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">Progress</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"text-center mb-4\">\n <p className=\"text-4xl font-bold\">\n {Math.round((completedTasks / record.checklist.length) * 100)}%\n </p>\n <p className=\"text-sm text-text-secondary\">Complete</p>\n </div>\n <div className=\"h-3 rounded-full bg-bg-sunken overflow-hidden\">\n <div\n className=\"h-full rounded-full bg-action-primary-bg transition-all\"\n style={{ width: `${(completedTasks / record.checklist.length) * 100}%` }}\n />\n </div>\n </CardContent>\n </Card>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}