@burdenoff/microfe-assethandler 2026.703.2 → 2026.703.4

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,14 +1,15 @@
1
1
  import { useAssetHandlerStore as e } from "../store/assethandlerStore.js";
2
- import { tWithFallback as t } from "../utils/i18n.js";
3
- import { ArrowLeft as n, Calendar as r, Clock as i, MapPin as a, Tag as o, User as s, Wrench as c } from "lucide-react";
4
- import { useNavigate as l, useParams as u } from "react-router-dom";
5
- import { Badge as d, Button as f, Card as p, CardContent as m, CardDescription as h, CardHeader as g, CardTitle as _, EmphasisPanel as v, GradientText as y, IllustratedEmptyState as b, NextSteps as x, PagePurpose as S, Separator as C, Tabs as w, TabsContent as T, TabsList as E, TabsTrigger as D } from "@burdenoff/fe-libs/ui";
6
- import { useI18n as O } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
7
- import { Fragment as k, jsx as A, jsxs as j } from "react/jsx-runtime";
8
- import { gql as M } from "@apollo/client";
9
- import { useQuery as N } from "@apollo/client/react";
2
+ import { useAssetHandlerNavigate as t } from "../hooks/useAssetHandlerNavigate.js";
3
+ import { tWithFallback as n } from "../utils/i18n.js";
4
+ import { ArrowLeft as r, Calendar as i, Clock as a, MapPin as o, Tag as s, User as c, Wrench as l } from "lucide-react";
5
+ import { useParams as u } from "react-router-dom";
6
+ import { gql as d } from "@apollo/client";
7
+ import { useQuery as f } from "@apollo/client/react";
8
+ import { Fragment as p, jsx as m, jsxs as h } from "react/jsx-runtime";
9
+ import { Badge as g, Button as _, Card as v, CardContent as y, CardDescription as b, CardHeader as x, CardTitle as S, EmphasisPanel as C, GradientText as w, IllustratedEmptyState as T, NextSteps as E, PagePurpose as D, Separator as O, Tabs as k, TabsContent as A, TabsList as j, TabsTrigger as M } from "@burdenoff/fe-libs/ui";
10
+ import { useI18n as N } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
10
11
  //#region src/assethandler/pages/AssetsAssetDetailPage.tsx
11
- var P = M`
12
+ var P = d`
12
13
  query AssetHandlerAsset($id: ID!) {
13
14
  asset(id: $id) {
14
15
  id
@@ -40,23 +41,23 @@ var P = M`
40
41
  damaged: "text-status-error-text bg-status-error-bg-subtle"
41
42
  };
42
43
  function L() {
43
- let { t: M } = O(), L = l(), { assetId: z } = u(), { maintenanceRecords: B } = e(), { data: V, loading: H } = N(P, {
44
+ let { t: d } = N(), L = t(), { assetId: z } = u(), { maintenanceRecords: B } = e(), { data: V, loading: H } = f(P, {
44
45
  variables: { id: z ?? "" },
45
46
  skip: !z,
46
47
  fetchPolicy: "cache-and-network"
47
48
  });
48
- if (H && !V) return /* @__PURE__ */ A("div", {
49
+ if (H && !V) return /* @__PURE__ */ m("div", {
49
50
  className: "space-y-3 p-6",
50
- children: Array.from({ length: 6 }).map((e, t) => /* @__PURE__ */ A("div", { className: "h-10 rounded-md bg-bg-sunken motion-safe:animate-vc-shimmer" }, t))
51
+ children: Array.from({ length: 6 }).map((e, t) => /* @__PURE__ */ m("div", { className: "h-10 rounded-md bg-bg-sunken motion-safe:animate-vc-shimmer" }, t))
51
52
  });
52
53
  let U = V?.asset;
53
- if (!U) return /* @__PURE__ */ A("div", {
54
+ if (!U) return /* @__PURE__ */ m("div", {
54
55
  className: "p-6",
55
- children: /* @__PURE__ */ A(b, {
56
+ children: /* @__PURE__ */ m(T, {
56
57
  illustration: "empty-search",
57
- title: t(M, "assethandler.assets.detail.notFound", "Asset not found"),
58
+ title: n(d, "assethandler.assets.detail.notFound", "Asset not found"),
58
59
  description: "This asset may have been disposed or removed. Return to the inventory to find it.",
59
- action: /* @__PURE__ */ A(f, {
60
+ action: /* @__PURE__ */ m(_, {
60
61
  size: "sm",
61
62
  onClick: () => L("/assets/asset-list"),
62
63
  children: "Back to inventory"
@@ -69,42 +70,42 @@ function L() {
69
70
  condition: U.condition.toLowerCase(),
70
71
  category: U.category.toLowerCase()
71
72
  }, G = B.filter((e) => e.assetId === W.id), K = G.filter((e) => e.status !== "completed" && e.status !== "cancelled");
72
- return /* @__PURE__ */ j("div", {
73
+ return /* @__PURE__ */ h("div", {
73
74
  className: "space-y-6 p-6",
74
75
  children: [
75
- /* @__PURE__ */ A("div", {
76
+ /* @__PURE__ */ m("div", {
76
77
  className: "flex items-center justify-between",
77
- children: /* @__PURE__ */ j("div", {
78
+ children: /* @__PURE__ */ h("div", {
78
79
  className: "flex items-center gap-4",
79
- children: [/* @__PURE__ */ A(f, {
80
+ children: [/* @__PURE__ */ m(_, {
80
81
  variant: "ghost",
81
82
  size: "icon",
82
83
  onClick: () => L("/assets/asset-list"),
83
- children: /* @__PURE__ */ A(n, { className: "h-4 w-4" })
84
- }), /* @__PURE__ */ j("div", { children: [/* @__PURE__ */ j("div", {
84
+ children: /* @__PURE__ */ m(r, { className: "h-4 w-4" })
85
+ }), /* @__PURE__ */ h("div", { children: [/* @__PURE__ */ h("div", {
85
86
  className: "flex items-center gap-3",
86
87
  children: [
87
- /* @__PURE__ */ A("h1", {
88
+ /* @__PURE__ */ m("h1", {
88
89
  className: "text-2xl font-bold",
89
- children: /* @__PURE__ */ A(y, { children: W.name })
90
+ children: /* @__PURE__ */ m(w, { children: W.name })
90
91
  }),
91
- /* @__PURE__ */ A(d, {
92
+ /* @__PURE__ */ m(g, {
92
93
  variant: F[W.status] ?? "outline",
93
94
  children: W.status.replace(/_/g, " ")
94
95
  }),
95
- /* @__PURE__ */ A("span", {
96
+ /* @__PURE__ */ m("span", {
96
97
  className: `rounded-md px-2 py-0.5 text-xs font-medium ${I[W.condition] ?? ""}`,
97
98
  children: W.condition
98
99
  })
99
100
  ]
100
- }), /* @__PURE__ */ j("p", {
101
+ }), /* @__PURE__ */ h("p", {
101
102
  className: "text-sm text-text-secondary mt-1",
102
- children: [W.assetNumber, W.serialNumber ? /* @__PURE__ */ j(k, { children: [" · SN: ", W.serialNumber] }) : null]
103
+ children: [W.assetNumber, W.serialNumber ? /* @__PURE__ */ h(p, { children: [" · SN: ", W.serialNumber] }) : null]
103
104
  })] })]
104
105
  })
105
106
  }),
106
- /* @__PURE__ */ A(S, { children: t(M, "assethandler.assets.detail.purpose", "The complete profile of a single asset — its identity, condition, location, assignment and maintenance history. Use this page as the asset's home base: check it in or out and schedule the next service.") }),
107
- /* @__PURE__ */ A(x, {
107
+ /* @__PURE__ */ m(D, { children: n(d, "assethandler.assets.detail.purpose", "The complete profile of a single asset — its identity, condition, location, assignment and maintenance history. Use this page as the asset's home base: check it in or out and schedule the next service.") }),
108
+ /* @__PURE__ */ m(E, {
108
109
  storageKey: "assethandler-asset-detail",
109
110
  steps: [
110
111
  {
@@ -127,117 +128,117 @@ function L() {
127
128
  }
128
129
  ]
129
130
  }),
130
- /* @__PURE__ */ j("div", {
131
+ /* @__PURE__ */ h("div", {
131
132
  className: "grid gap-4 md:grid-cols-4",
132
133
  children: [
133
- /* @__PURE__ */ j(v, { children: [
134
- /* @__PURE__ */ j("div", {
134
+ /* @__PURE__ */ h(C, { children: [
135
+ /* @__PURE__ */ h("div", {
135
136
  className: "flex items-center gap-2 text-sm text-text-secondary",
136
- children: [/* @__PURE__ */ A(c, { className: "h-4 w-4" }), t(M, "assethandler.assets.detail.stats.maintenanceRecords", "Maintenance Records")]
137
+ children: [/* @__PURE__ */ m(l, { className: "h-4 w-4" }), n(d, "assethandler.assets.detail.stats.maintenanceRecords", "Maintenance Records")]
137
138
  }),
138
- /* @__PURE__ */ A("p", {
139
+ /* @__PURE__ */ m("p", {
139
140
  className: "text-2xl font-bold mt-1 tabular-nums",
140
141
  children: G.length
141
142
  }),
142
- /* @__PURE__ */ j("p", {
143
+ /* @__PURE__ */ h("p", {
143
144
  className: "text-xs text-text-secondary",
144
145
  children: [
145
146
  K.length,
146
147
  " ",
147
- t(M, "assethandler.assets.detail.stats.open", "open")
148
+ n(d, "assethandler.assets.detail.stats.open", "open")
148
149
  ]
149
150
  })
150
151
  ] }),
151
- /* @__PURE__ */ A(p, { children: /* @__PURE__ */ j(m, {
152
+ /* @__PURE__ */ m(v, { children: /* @__PURE__ */ h(y, {
152
153
  className: "pt-4",
153
- children: [/* @__PURE__ */ j("div", {
154
+ children: [/* @__PURE__ */ h("div", {
154
155
  className: "flex items-center gap-2 text-sm text-text-secondary",
155
- children: [/* @__PURE__ */ A(r, { className: "h-4 w-4" }), t(M, "assethandler.assets.detail.stats.registered", "Registered")]
156
- }), /* @__PURE__ */ A("p", {
156
+ children: [/* @__PURE__ */ m(i, { className: "h-4 w-4" }), n(d, "assethandler.assets.detail.stats.registered", "Registered")]
157
+ }), /* @__PURE__ */ m("p", {
157
158
  className: "text-lg font-bold mt-1",
158
159
  children: W.createdAt ? new Date(W.createdAt).toLocaleDateString() : "—"
159
160
  })]
160
161
  }) }),
161
- /* @__PURE__ */ A(p, { children: /* @__PURE__ */ j(m, {
162
+ /* @__PURE__ */ m(v, { children: /* @__PURE__ */ h(y, {
162
163
  className: "pt-4",
163
- children: [/* @__PURE__ */ j("div", {
164
+ children: [/* @__PURE__ */ h("div", {
164
165
  className: "flex items-center gap-2 text-sm text-text-secondary",
165
- children: [/* @__PURE__ */ A(i, { className: "h-4 w-4" }), t(M, "assethandler.assets.detail.stats.lastUpdated", "Last Updated")]
166
- }), /* @__PURE__ */ A("p", {
166
+ children: [/* @__PURE__ */ m(a, { className: "h-4 w-4" }), n(d, "assethandler.assets.detail.stats.lastUpdated", "Last Updated")]
167
+ }), /* @__PURE__ */ m("p", {
167
168
  className: "text-lg font-bold mt-1",
168
169
  children: W.updatedAt ? new Date(W.updatedAt).toLocaleDateString() : "—"
169
170
  })]
170
171
  }) }),
171
- /* @__PURE__ */ A(p, { children: /* @__PURE__ */ j(m, {
172
+ /* @__PURE__ */ m(v, { children: /* @__PURE__ */ h(y, {
172
173
  className: "pt-4",
173
- children: [/* @__PURE__ */ j("div", {
174
+ children: [/* @__PURE__ */ h("div", {
174
175
  className: "flex items-center gap-2 text-sm text-text-secondary",
175
- children: [/* @__PURE__ */ A(a, { className: "h-4 w-4" }), t(M, "assethandler.assets.detail.stats.location", "Location")]
176
- }), /* @__PURE__ */ A("p", {
176
+ children: [/* @__PURE__ */ m(o, { className: "h-4 w-4" }), n(d, "assethandler.assets.detail.stats.location", "Location")]
177
+ }), /* @__PURE__ */ m("p", {
177
178
  className: "text-lg font-bold mt-1 truncate",
178
179
  children: W.locationName || "—"
179
180
  })]
180
181
  }) })
181
182
  ]
182
183
  }),
183
- /* @__PURE__ */ j(w, {
184
+ /* @__PURE__ */ h(k, {
184
185
  defaultValue: "details",
185
186
  children: [
186
- /* @__PURE__ */ j(E, { children: [/* @__PURE__ */ A(D, {
187
+ /* @__PURE__ */ h(j, { children: [/* @__PURE__ */ m(M, {
187
188
  value: "details",
188
- children: t(M, "assethandler.assets.detail.tabs.details", "Details")
189
- }), /* @__PURE__ */ A(D, {
189
+ children: n(d, "assethandler.assets.detail.tabs.details", "Details")
190
+ }), /* @__PURE__ */ m(M, {
190
191
  value: "maintenance",
191
- children: t(M, "assethandler.assets.detail.tabs.maintenance", "Maintenance")
192
+ children: n(d, "assethandler.assets.detail.tabs.maintenance", "Maintenance")
192
193
  })] }),
193
- /* @__PURE__ */ A(T, {
194
+ /* @__PURE__ */ m(A, {
194
195
  value: "details",
195
196
  className: "space-y-6 mt-4",
196
- children: /* @__PURE__ */ j("div", {
197
+ children: /* @__PURE__ */ h("div", {
197
198
  className: "grid gap-6 lg:grid-cols-2",
198
- children: [/* @__PURE__ */ j(p, { children: [/* @__PURE__ */ A(g, { children: /* @__PURE__ */ A(_, { children: t(M, "assethandler.assets.detail.sections.generalInformation", "General Information") }) }), /* @__PURE__ */ A(m, { children: /* @__PURE__ */ j("dl", {
199
+ children: [/* @__PURE__ */ h(v, { children: [/* @__PURE__ */ m(x, { children: /* @__PURE__ */ m(S, { children: n(d, "assethandler.assets.detail.sections.generalInformation", "General Information") }) }), /* @__PURE__ */ m(y, { children: /* @__PURE__ */ h("dl", {
199
200
  className: "space-y-3 text-sm",
200
201
  children: [
201
- /* @__PURE__ */ A(R, {
202
- label: t(M, "assethandler.assets.detail.fields.description", "Description"),
202
+ /* @__PURE__ */ m(R, {
203
+ label: n(d, "assethandler.assets.detail.fields.description", "Description"),
203
204
  value: W.description || "—"
204
205
  }),
205
- /* @__PURE__ */ A(R, {
206
- label: t(M, "assethandler.assets.detail.fields.category", "Category"),
206
+ /* @__PURE__ */ m(R, {
207
+ label: n(d, "assethandler.assets.detail.fields.category", "Category"),
207
208
  value: W.category.replace(/_/g, " ")
208
209
  }),
209
- /* @__PURE__ */ A(R, {
210
- label: t(M, "assethandler.assets.detail.fields.serialNumber", "Serial Number"),
210
+ /* @__PURE__ */ m(R, {
211
+ label: n(d, "assethandler.assets.detail.fields.serialNumber", "Serial Number"),
211
212
  value: W.serialNumber || "—"
212
213
  }),
213
- /* @__PURE__ */ A(R, {
214
- label: t(M, "assethandler.assets.detail.fields.assetTag", "Asset Tag"),
214
+ /* @__PURE__ */ m(R, {
215
+ label: n(d, "assethandler.assets.detail.fields.assetTag", "Asset Tag"),
215
216
  value: W.assetNumber
216
217
  })
217
218
  ]
218
- }) })] }), /* @__PURE__ */ j(p, { children: [/* @__PURE__ */ A(g, { children: /* @__PURE__ */ A(_, { children: t(M, "assethandler.assets.detail.sections.assignmentLocation", "Assignment & Location") }) }), /* @__PURE__ */ j(m, { children: [
219
- /* @__PURE__ */ j("dl", {
219
+ }) })] }), /* @__PURE__ */ h(v, { children: [/* @__PURE__ */ m(x, { children: /* @__PURE__ */ m(S, { children: n(d, "assethandler.assets.detail.sections.assignmentLocation", "Assignment & Location") }) }), /* @__PURE__ */ h(y, { children: [
220
+ /* @__PURE__ */ h("dl", {
220
221
  className: "space-y-3 text-sm",
221
- children: [/* @__PURE__ */ A(R, {
222
- label: t(M, "assethandler.assets.detail.fields.assignedTo", "Assigned To"),
222
+ children: [/* @__PURE__ */ m(R, {
223
+ label: n(d, "assethandler.assets.detail.fields.assignedTo", "Assigned To"),
223
224
  value: W.assignedTo || "—",
224
- icon: /* @__PURE__ */ A(s, { className: "h-3.5 w-3.5" })
225
- }), /* @__PURE__ */ A(R, {
226
- label: t(M, "assethandler.assets.detail.fields.location", "Location"),
225
+ icon: /* @__PURE__ */ m(c, { className: "h-3.5 w-3.5" })
226
+ }), /* @__PURE__ */ m(R, {
227
+ label: n(d, "assethandler.assets.detail.fields.location", "Location"),
227
228
  value: W.locationName || "—",
228
- icon: /* @__PURE__ */ A(a, { className: "h-3.5 w-3.5" })
229
+ icon: /* @__PURE__ */ m(o, { className: "h-3.5 w-3.5" })
229
230
  })]
230
231
  }),
231
- /* @__PURE__ */ A(C, { className: "my-4" }),
232
- /* @__PURE__ */ j("div", { children: [/* @__PURE__ */ j("h4", {
232
+ /* @__PURE__ */ m(O, { className: "my-4" }),
233
+ /* @__PURE__ */ h("div", { children: [/* @__PURE__ */ h("h4", {
233
234
  className: "text-sm font-medium mb-2 flex items-center gap-2",
234
- children: [/* @__PURE__ */ A(o, { className: "h-3.5 w-3.5" }), t(M, "assethandler.assets.detail.fields.tags", "Tags")]
235
- }), W.tags.length === 0 ? /* @__PURE__ */ A("p", {
235
+ children: [/* @__PURE__ */ m(s, { className: "h-3.5 w-3.5" }), n(d, "assethandler.assets.detail.fields.tags", "Tags")]
236
+ }), W.tags.length === 0 ? /* @__PURE__ */ m("p", {
236
237
  className: "text-xs text-text-secondary",
237
- children: t(M, "assethandler.assets.detail.fields.noTags", "No tags yet")
238
- }) : /* @__PURE__ */ A("div", {
238
+ children: n(d, "assethandler.assets.detail.fields.noTags", "No tags yet")
239
+ }) : /* @__PURE__ */ m("div", {
239
240
  className: "flex flex-wrap gap-1.5",
240
- children: W.tags.map((e) => /* @__PURE__ */ A(d, {
241
+ children: W.tags.map((e) => /* @__PURE__ */ m(g, {
241
242
  variant: "secondary",
242
243
  className: "text-xs",
243
244
  children: e
@@ -246,55 +247,55 @@ function L() {
246
247
  ] })] })]
247
248
  })
248
249
  }),
249
- /* @__PURE__ */ A(T, {
250
+ /* @__PURE__ */ m(A, {
250
251
  value: "maintenance",
251
252
  className: "mt-4",
252
- children: /* @__PURE__ */ j(p, { children: [/* @__PURE__ */ j(g, { children: [/* @__PURE__ */ j(_, {
253
+ children: /* @__PURE__ */ h(v, { children: [/* @__PURE__ */ h(x, { children: [/* @__PURE__ */ h(S, {
253
254
  className: "flex items-center gap-2",
254
- children: [/* @__PURE__ */ A(c, { className: "h-4 w-4" }), t(M, "assethandler.assets.detail.maintenance.title", "Maintenance History")]
255
- }), /* @__PURE__ */ j(h, { children: [
255
+ children: [/* @__PURE__ */ m(l, { className: "h-4 w-4" }), n(d, "assethandler.assets.detail.maintenance.title", "Maintenance History")]
256
+ }), /* @__PURE__ */ h(b, { children: [
256
257
  G.length,
257
258
  " ",
258
- t(M, "assethandler.assets.detail.maintenance.recordsFound", "records found")
259
- ] })] }), /* @__PURE__ */ A(m, { children: G.length === 0 ? /* @__PURE__ */ A("p", {
259
+ n(d, "assethandler.assets.detail.maintenance.recordsFound", "records found")
260
+ ] })] }), /* @__PURE__ */ m(y, { children: G.length === 0 ? /* @__PURE__ */ m("p", {
260
261
  className: "text-center text-text-secondary py-8",
261
- children: t(M, "assethandler.assets.detail.maintenance.empty", "No maintenance records for this asset.")
262
- }) : /* @__PURE__ */ A("div", {
262
+ children: n(d, "assethandler.assets.detail.maintenance.empty", "No maintenance records for this asset.")
263
+ }) : /* @__PURE__ */ m("div", {
263
264
  className: "space-y-3",
264
- children: G.map((e) => /* @__PURE__ */ A("div", {
265
+ children: G.map((e) => /* @__PURE__ */ m("div", {
265
266
  className: "flex items-start gap-4 rounded-lg border p-4",
266
- children: /* @__PURE__ */ j("div", {
267
+ children: /* @__PURE__ */ h("div", {
267
268
  className: "flex-1",
268
269
  children: [
269
- /* @__PURE__ */ j("div", {
270
+ /* @__PURE__ */ h("div", {
270
271
  className: "flex items-center gap-2",
271
- children: [/* @__PURE__ */ A(d, {
272
+ children: [/* @__PURE__ */ m(g, {
272
273
  variant: "outline",
273
274
  className: "capitalize",
274
275
  children: e.type
275
- }), /* @__PURE__ */ A(d, {
276
+ }), /* @__PURE__ */ m(g, {
276
277
  variant: e.status === "completed" ? "default" : "secondary",
277
278
  className: "capitalize",
278
279
  children: e.status.replace(/_/g, " ")
279
280
  })]
280
281
  }),
281
- /* @__PURE__ */ A("p", {
282
+ /* @__PURE__ */ m("p", {
282
283
  className: "font-medium mt-1",
283
284
  children: e.title
284
285
  }),
285
- /* @__PURE__ */ A("p", {
286
+ /* @__PURE__ */ m("p", {
286
287
  className: "text-sm text-text-secondary",
287
288
  children: e.description
288
289
  }),
289
- /* @__PURE__ */ j("div", {
290
+ /* @__PURE__ */ h("div", {
290
291
  className: "flex gap-4 mt-2 text-xs text-text-secondary",
291
- children: [/* @__PURE__ */ j("span", { children: [
292
- t(M, "assethandler.assets.detail.maintenance.scheduled", "Scheduled"),
292
+ children: [/* @__PURE__ */ h("span", { children: [
293
+ n(d, "assethandler.assets.detail.maintenance.scheduled", "Scheduled"),
293
294
  ":",
294
295
  " ",
295
296
  e.scheduledDate ? new Date(e.scheduledDate).toLocaleDateString() : "—"
296
- ] }), e.actualCost != null || e.estimatedCost != null ? /* @__PURE__ */ j("span", { children: [
297
- t(M, "assethandler.assets.detail.maintenance.cost", "Cost"),
297
+ ] }), e.actualCost != null || e.estimatedCost != null ? /* @__PURE__ */ h("span", { children: [
298
+ n(d, "assethandler.assets.detail.maintenance.cost", "Cost"),
298
299
  ": $",
299
300
  (e.actualCost ?? e.estimatedCost ?? 0).toLocaleString()
300
301
  ] }) : null]
@@ -310,12 +311,12 @@ function L() {
310
311
  });
311
312
  }
312
313
  function R({ label: e, value: t, icon: n }) {
313
- return /* @__PURE__ */ j("div", {
314
+ return /* @__PURE__ */ h("div", {
314
315
  className: "flex items-start justify-between gap-4",
315
- children: [/* @__PURE__ */ j("dt", {
316
+ children: [/* @__PURE__ */ h("dt", {
316
317
  className: "text-text-secondary flex items-center gap-1.5 shrink-0",
317
318
  children: [n, e]
318
- }), /* @__PURE__ */ A("dd", {
319
+ }), /* @__PURE__ */ m("dd", {
319
320
  className: "font-medium text-right capitalize",
320
321
  children: t
321
322
  })]
@@ -1 +1 @@
1
- {"version":3,"file":"AssetsAssetDetailPage.js","names":[],"sources":["../../../src/assethandler/pages/AssetsAssetDetailPage.tsx"],"sourcesContent":["import type React from 'react';\nimport {\n Badge,\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n Separator,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n GradientText,\n EmphasisPanel,\n PagePurpose,\n NextSteps,\n IllustratedEmptyState,\n} from '@burdenoff/fe-libs/ui';\nimport { ArrowLeft, MapPin, Calendar, Tag, User, Wrench, Clock } from 'lucide-react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { useAssetHandlerStore } from '../store/assethandlerStore';\nimport { tWithFallback } from '../utils/i18n';\n\nconst ASSET_QUERY = gql`\n query AssetHandlerAsset($id: ID!) {\n asset(id: $id) {\n id\n assetNumber\n name\n description\n category\n status\n condition\n serialNumber\n locationName\n assignedTo\n tags\n createdAt\n updatedAt\n }\n }\n`;\n\ninterface AssetQueryResult {\n asset: {\n id: string;\n assetNumber: string;\n name: string;\n description?: string | null;\n category: string;\n status: string;\n condition: string;\n serialNumber?: string | null;\n locationName?: string | null;\n assignedTo?: string | null;\n tags: string[];\n createdAt: string;\n updatedAt: string;\n } | null;\n}\n\nconst statusColors: Record<string, 'default' | 'secondary' | 'destructive' | 'outline'> = {\n active: 'default',\n inactive: 'outline',\n maintenance: 'secondary',\n retired: 'outline',\n disposed: 'destructive',\n};\nconst conditionColors: Record<string, string> = {\n excellent: 'text-status-success-text bg-status-success-bg-subtle',\n good: 'text-status-info-text bg-status-info-bg-subtle',\n fair: 'text-status-warning-text bg-status-warning-bg-subtle',\n poor: 'text-status-warning-text bg-status-warning-bg-subtle',\n damaged: 'text-status-error-text bg-status-error-bg-subtle',\n};\n\nexport function AssetsAssetDetailPage() {\n const { t } = useI18n();\n const navigate = useNavigate();\n const { assetId } = useParams<{ assetId: string }>();\n const { maintenanceRecords } = useAssetHandlerStore();\n\n const { data, loading } = useQuery<AssetQueryResult>(ASSET_QUERY, {\n variables: { id: assetId ?? '' },\n skip: !assetId,\n fetchPolicy: 'cache-and-network',\n });\n\n if (loading && !data) {\n return (\n <div className=\"space-y-3 p-6\">\n {Array.from({ length: 6 }).map((_, i) => (\n <div key={i} className=\"h-10 rounded-md bg-bg-sunken motion-safe:animate-vc-shimmer\" />\n ))}\n </div>\n );\n }\n\n const raw = data?.asset;\n if (!raw) {\n return (\n <div className=\"p-6\">\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title={tWithFallback(t, 'assethandler.assets.detail.notFound', 'Asset not found')}\n description=\"This asset may have been disposed or removed. Return to the inventory to find it.\"\n action={\n <Button size=\"sm\" onClick={() => navigate('/assets/asset-list')}>\n Back to inventory\n </Button>\n }\n />\n </div>\n );\n }\n\n const asset = {\n ...raw,\n status: raw.status.toLowerCase(),\n condition: raw.condition.toLowerCase(),\n category: raw.category.toLowerCase(),\n };\n const assetMaintenance = maintenanceRecords.filter((m) => m.assetId === asset.id);\n const openMaintenance = assetMaintenance.filter(\n (m) => m.status !== 'completed' && m.status !== 'cancelled'\n );\n\n return (\n <div className=\"space-y-6 p-6\">\n {/* Header */}\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-4\">\n <Button variant=\"ghost\" size=\"icon\" onClick={() => navigate('/assets/asset-list')}>\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>{asset.name}</GradientText>\n </h1>\n <Badge variant={statusColors[asset.status] ?? 'outline'}>\n {asset.status.replace(/_/g, ' ')}\n </Badge>\n <span\n className={`rounded-md px-2 py-0.5 text-xs font-medium ${conditionColors[asset.condition] ?? ''}`}\n >\n {asset.condition}\n </span>\n </div>\n <p className=\"text-sm text-text-secondary mt-1\">\n {asset.assetNumber}\n {asset.serialNumber ? <> &middot; SN: {asset.serialNumber}</> : null}\n </p>\n </div>\n </div>\n </div>\n\n <PagePurpose>\n {tWithFallback(\n t,\n 'assethandler.assets.detail.purpose',\n \"The complete profile of a single asset — its identity, condition, location, assignment and maintenance history. Use this page as the asset's home base: check it in or out and schedule the next service.\"\n )}\n </PagePurpose>\n\n <NextSteps\n storageKey=\"assethandler-asset-detail\"\n steps={[\n {\n id: 'checkinout',\n label: 'Check this asset in or out',\n description: 'Record who is using it and when it returns.',\n onClick: () => navigate('/assets/asset-check-in-out'),\n },\n {\n id: 'maintenance',\n label: 'Schedule maintenance',\n description: 'Plan the next service before it is overdue.',\n onClick: () => navigate('/maintenance/maintenance-scheduler'),\n },\n {\n id: 'operations',\n label: 'Raise a work order',\n description: 'Create corrective or preventive work for this asset.',\n onClick: () => navigate('/operations/operations-hub'),\n },\n ]}\n />\n\n {/* Quick Stats */}\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 <Wrench className=\"h-4 w-4\" />\n {tWithFallback(\n t,\n 'assethandler.assets.detail.stats.maintenanceRecords',\n 'Maintenance Records'\n )}\n </div>\n <p className=\"text-2xl font-bold mt-1 tabular-nums\">{assetMaintenance.length}</p>\n <p className=\"text-xs text-text-secondary\">\n {openMaintenance.length}{' '}\n {tWithFallback(t, 'assethandler.assets.detail.stats.open', 'open')}\n </p>\n </EmphasisPanel>\n <Card>\n <CardContent className=\"pt-4\">\n <div className=\"flex items-center gap-2 text-sm text-text-secondary\">\n <Calendar className=\"h-4 w-4\" />\n {tWithFallback(t, 'assethandler.assets.detail.stats.registered', 'Registered')}\n </div>\n <p className=\"text-lg font-bold mt-1\">\n {asset.createdAt ? new Date(asset.createdAt).toLocaleDateString() : '—'}\n </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 {tWithFallback(t, 'assethandler.assets.detail.stats.lastUpdated', 'Last Updated')}\n </div>\n <p className=\"text-lg font-bold mt-1\">\n {asset.updatedAt ? new Date(asset.updatedAt).toLocaleDateString() : '—'}\n </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 <MapPin className=\"h-4 w-4\" />\n {tWithFallback(t, 'assethandler.assets.detail.stats.location', 'Location')}\n </div>\n <p className=\"text-lg font-bold mt-1 truncate\">{asset.locationName || '—'}</p>\n </CardContent>\n </Card>\n </div>\n\n <Tabs defaultValue=\"details\">\n <TabsList>\n <TabsTrigger value=\"details\">\n {tWithFallback(t, 'assethandler.assets.detail.tabs.details', 'Details')}\n </TabsTrigger>\n <TabsTrigger value=\"maintenance\">\n {tWithFallback(t, 'assethandler.assets.detail.tabs.maintenance', 'Maintenance')}\n </TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"details\" className=\"space-y-6 mt-4\">\n <div className=\"grid gap-6 lg:grid-cols-2\">\n <Card>\n <CardHeader>\n <CardTitle>\n {tWithFallback(\n t,\n 'assethandler.assets.detail.sections.generalInformation',\n 'General Information'\n )}\n </CardTitle>\n </CardHeader>\n <CardContent>\n <dl className=\"space-y-3 text-sm\">\n <DetailRow\n label={tWithFallback(\n t,\n 'assethandler.assets.detail.fields.description',\n 'Description'\n )}\n value={asset.description || '—'}\n />\n <DetailRow\n label={tWithFallback(\n t,\n 'assethandler.assets.detail.fields.category',\n 'Category'\n )}\n value={asset.category.replace(/_/g, ' ')}\n />\n <DetailRow\n label={tWithFallback(\n t,\n 'assethandler.assets.detail.fields.serialNumber',\n 'Serial Number'\n )}\n value={asset.serialNumber || '—'}\n />\n <DetailRow\n label={tWithFallback(\n t,\n 'assethandler.assets.detail.fields.assetTag',\n 'Asset Tag'\n )}\n value={asset.assetNumber}\n />\n </dl>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>\n {tWithFallback(\n t,\n 'assethandler.assets.detail.sections.assignmentLocation',\n 'Assignment & Location'\n )}\n </CardTitle>\n </CardHeader>\n <CardContent>\n <dl className=\"space-y-3 text-sm\">\n <DetailRow\n label={tWithFallback(\n t,\n 'assethandler.assets.detail.fields.assignedTo',\n 'Assigned To'\n )}\n value={asset.assignedTo || '—'}\n icon={<User className=\"h-3.5 w-3.5\" />}\n />\n <DetailRow\n label={tWithFallback(\n t,\n 'assethandler.assets.detail.fields.location',\n 'Location'\n )}\n value={asset.locationName || '—'}\n icon={<MapPin className=\"h-3.5 w-3.5\" />}\n />\n </dl>\n <Separator className=\"my-4\" />\n <div>\n <h4 className=\"text-sm font-medium mb-2 flex items-center gap-2\">\n <Tag className=\"h-3.5 w-3.5\" />\n {tWithFallback(t, 'assethandler.assets.detail.fields.tags', 'Tags')}\n </h4>\n {asset.tags.length === 0 ? (\n <p className=\"text-xs text-text-secondary\">\n {tWithFallback(t, 'assethandler.assets.detail.fields.noTags', 'No tags yet')}\n </p>\n ) : (\n <div className=\"flex flex-wrap gap-1.5\">\n {asset.tags.map((tag) => (\n <Badge key={tag} variant=\"secondary\" className=\"text-xs\">\n {tag}\n </Badge>\n ))}\n </div>\n )}\n </div>\n </CardContent>\n </Card>\n </div>\n </TabsContent>\n\n <TabsContent value=\"maintenance\" className=\"mt-4\">\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Wrench className=\"h-4 w-4\" />\n {tWithFallback(\n t,\n 'assethandler.assets.detail.maintenance.title',\n 'Maintenance History'\n )}\n </CardTitle>\n <CardDescription>\n {assetMaintenance.length}{' '}\n {tWithFallback(\n t,\n 'assethandler.assets.detail.maintenance.recordsFound',\n 'records found'\n )}\n </CardDescription>\n </CardHeader>\n <CardContent>\n {assetMaintenance.length === 0 ? (\n <p className=\"text-center text-text-secondary py-8\">\n {tWithFallback(\n t,\n 'assethandler.assets.detail.maintenance.empty',\n 'No maintenance records for this asset.'\n )}\n </p>\n ) : (\n <div className=\"space-y-3\">\n {assetMaintenance.map((m) => (\n <div key={m.id} className=\"flex items-start gap-4 rounded-lg border p-4\">\n <div className=\"flex-1\">\n <div className=\"flex items-center gap-2\">\n <Badge variant=\"outline\" className=\"capitalize\">\n {m.type}\n </Badge>\n <Badge\n variant={m.status === 'completed' ? 'default' : 'secondary'}\n className=\"capitalize\"\n >\n {m.status.replace(/_/g, ' ')}\n </Badge>\n </div>\n <p className=\"font-medium mt-1\">{m.title}</p>\n <p className=\"text-sm text-text-secondary\">{m.description}</p>\n <div className=\"flex gap-4 mt-2 text-xs text-text-secondary\">\n <span>\n {tWithFallback(\n t,\n 'assethandler.assets.detail.maintenance.scheduled',\n 'Scheduled'\n )}\n :{' '}\n {m.scheduledDate ? new Date(m.scheduledDate).toLocaleDateString() : '—'}\n </span>\n {m.actualCost != null || m.estimatedCost != null ? (\n <span>\n {tWithFallback(\n t,\n 'assethandler.assets.detail.maintenance.cost',\n 'Cost'\n )}\n : ${(m.actualCost ?? m.estimatedCost ?? 0).toLocaleString()}\n </span>\n ) : null}\n </div>\n </div>\n </div>\n ))}\n </div>\n )}\n </CardContent>\n </Card>\n </TabsContent>\n </Tabs>\n </div>\n );\n}\n\nfunction DetailRow({\n label,\n value,\n icon,\n}: {\n label: string;\n value: string;\n icon?: React.ReactNode;\n}) {\n return (\n <div className=\"flex items-start justify-between gap-4\">\n <dt className=\"text-text-secondary flex items-center gap-1.5 shrink-0\">\n {icon}\n {label}\n </dt>\n <dd className=\"font-medium text-right capitalize\">{value}</dd>\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"AssetsAssetDetailPage.js","names":[],"sources":["../../../src/assethandler/pages/AssetsAssetDetailPage.tsx"],"sourcesContent":["import { useAssetHandlerNavigate } from '../hooks/useAssetHandlerNavigate';\nimport type React from 'react';\nimport {\n Badge,\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n Separator,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n GradientText,\n EmphasisPanel,\n PagePurpose,\n NextSteps,\n IllustratedEmptyState,\n} from '@burdenoff/fe-libs/ui';\nimport { ArrowLeft, MapPin, Calendar, Tag, User, Wrench, Clock } from 'lucide-react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { useParams } from 'react-router-dom';\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { useAssetHandlerStore } from '../store/assethandlerStore';\nimport { tWithFallback } from '../utils/i18n';\n\nconst ASSET_QUERY = gql`\n query AssetHandlerAsset($id: ID!) {\n asset(id: $id) {\n id\n assetNumber\n name\n description\n category\n status\n condition\n serialNumber\n locationName\n assignedTo\n tags\n createdAt\n updatedAt\n }\n }\n`;\n\ninterface AssetQueryResult {\n asset: {\n id: string;\n assetNumber: string;\n name: string;\n description?: string | null;\n category: string;\n status: string;\n condition: string;\n serialNumber?: string | null;\n locationName?: string | null;\n assignedTo?: string | null;\n tags: string[];\n createdAt: string;\n updatedAt: string;\n } | null;\n}\n\nconst statusColors: Record<string, 'default' | 'secondary' | 'destructive' | 'outline'> = {\n active: 'default',\n inactive: 'outline',\n maintenance: 'secondary',\n retired: 'outline',\n disposed: 'destructive',\n};\nconst conditionColors: Record<string, string> = {\n excellent: 'text-status-success-text bg-status-success-bg-subtle',\n good: 'text-status-info-text bg-status-info-bg-subtle',\n fair: 'text-status-warning-text bg-status-warning-bg-subtle',\n poor: 'text-status-warning-text bg-status-warning-bg-subtle',\n damaged: 'text-status-error-text bg-status-error-bg-subtle',\n};\n\nexport function AssetsAssetDetailPage() {\n const { t } = useI18n();\n const navigate = useAssetHandlerNavigate();\n const { assetId } = useParams<{ assetId: string }>();\n const { maintenanceRecords } = useAssetHandlerStore();\n\n const { data, loading } = useQuery<AssetQueryResult>(ASSET_QUERY, {\n variables: { id: assetId ?? '' },\n skip: !assetId,\n fetchPolicy: 'cache-and-network',\n });\n\n if (loading && !data) {\n return (\n <div className=\"space-y-3 p-6\">\n {Array.from({ length: 6 }).map((_, i) => (\n <div key={i} className=\"h-10 rounded-md bg-bg-sunken motion-safe:animate-vc-shimmer\" />\n ))}\n </div>\n );\n }\n\n const raw = data?.asset;\n if (!raw) {\n return (\n <div className=\"p-6\">\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title={tWithFallback(t, 'assethandler.assets.detail.notFound', 'Asset not found')}\n description=\"This asset may have been disposed or removed. Return to the inventory to find it.\"\n action={\n <Button size=\"sm\" onClick={() => navigate('/assets/asset-list')}>\n Back to inventory\n </Button>\n }\n />\n </div>\n );\n }\n\n const asset = {\n ...raw,\n status: raw.status.toLowerCase(),\n condition: raw.condition.toLowerCase(),\n category: raw.category.toLowerCase(),\n };\n const assetMaintenance = maintenanceRecords.filter((m) => m.assetId === asset.id);\n const openMaintenance = assetMaintenance.filter(\n (m) => m.status !== 'completed' && m.status !== 'cancelled'\n );\n\n return (\n <div className=\"space-y-6 p-6\">\n {/* Header */}\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-4\">\n <Button variant=\"ghost\" size=\"icon\" onClick={() => navigate('/assets/asset-list')}>\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>{asset.name}</GradientText>\n </h1>\n <Badge variant={statusColors[asset.status] ?? 'outline'}>\n {asset.status.replace(/_/g, ' ')}\n </Badge>\n <span\n className={`rounded-md px-2 py-0.5 text-xs font-medium ${conditionColors[asset.condition] ?? ''}`}\n >\n {asset.condition}\n </span>\n </div>\n <p className=\"text-sm text-text-secondary mt-1\">\n {asset.assetNumber}\n {asset.serialNumber ? <> &middot; SN: {asset.serialNumber}</> : null}\n </p>\n </div>\n </div>\n </div>\n\n <PagePurpose>\n {tWithFallback(\n t,\n 'assethandler.assets.detail.purpose',\n \"The complete profile of a single asset — its identity, condition, location, assignment and maintenance history. Use this page as the asset's home base: check it in or out and schedule the next service.\"\n )}\n </PagePurpose>\n\n <NextSteps\n storageKey=\"assethandler-asset-detail\"\n steps={[\n {\n id: 'checkinout',\n label: 'Check this asset in or out',\n description: 'Record who is using it and when it returns.',\n onClick: () => navigate('/assets/asset-check-in-out'),\n },\n {\n id: 'maintenance',\n label: 'Schedule maintenance',\n description: 'Plan the next service before it is overdue.',\n onClick: () => navigate('/maintenance/maintenance-scheduler'),\n },\n {\n id: 'operations',\n label: 'Raise a work order',\n description: 'Create corrective or preventive work for this asset.',\n onClick: () => navigate('/operations/operations-hub'),\n },\n ]}\n />\n\n {/* Quick Stats */}\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 <Wrench className=\"h-4 w-4\" />\n {tWithFallback(\n t,\n 'assethandler.assets.detail.stats.maintenanceRecords',\n 'Maintenance Records'\n )}\n </div>\n <p className=\"text-2xl font-bold mt-1 tabular-nums\">{assetMaintenance.length}</p>\n <p className=\"text-xs text-text-secondary\">\n {openMaintenance.length}{' '}\n {tWithFallback(t, 'assethandler.assets.detail.stats.open', 'open')}\n </p>\n </EmphasisPanel>\n <Card>\n <CardContent className=\"pt-4\">\n <div className=\"flex items-center gap-2 text-sm text-text-secondary\">\n <Calendar className=\"h-4 w-4\" />\n {tWithFallback(t, 'assethandler.assets.detail.stats.registered', 'Registered')}\n </div>\n <p className=\"text-lg font-bold mt-1\">\n {asset.createdAt ? new Date(asset.createdAt).toLocaleDateString() : '—'}\n </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 {tWithFallback(t, 'assethandler.assets.detail.stats.lastUpdated', 'Last Updated')}\n </div>\n <p className=\"text-lg font-bold mt-1\">\n {asset.updatedAt ? new Date(asset.updatedAt).toLocaleDateString() : '—'}\n </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 <MapPin className=\"h-4 w-4\" />\n {tWithFallback(t, 'assethandler.assets.detail.stats.location', 'Location')}\n </div>\n <p className=\"text-lg font-bold mt-1 truncate\">{asset.locationName || '—'}</p>\n </CardContent>\n </Card>\n </div>\n\n <Tabs defaultValue=\"details\">\n <TabsList>\n <TabsTrigger value=\"details\">\n {tWithFallback(t, 'assethandler.assets.detail.tabs.details', 'Details')}\n </TabsTrigger>\n <TabsTrigger value=\"maintenance\">\n {tWithFallback(t, 'assethandler.assets.detail.tabs.maintenance', 'Maintenance')}\n </TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"details\" className=\"space-y-6 mt-4\">\n <div className=\"grid gap-6 lg:grid-cols-2\">\n <Card>\n <CardHeader>\n <CardTitle>\n {tWithFallback(\n t,\n 'assethandler.assets.detail.sections.generalInformation',\n 'General Information'\n )}\n </CardTitle>\n </CardHeader>\n <CardContent>\n <dl className=\"space-y-3 text-sm\">\n <DetailRow\n label={tWithFallback(\n t,\n 'assethandler.assets.detail.fields.description',\n 'Description'\n )}\n value={asset.description || '—'}\n />\n <DetailRow\n label={tWithFallback(\n t,\n 'assethandler.assets.detail.fields.category',\n 'Category'\n )}\n value={asset.category.replace(/_/g, ' ')}\n />\n <DetailRow\n label={tWithFallback(\n t,\n 'assethandler.assets.detail.fields.serialNumber',\n 'Serial Number'\n )}\n value={asset.serialNumber || '—'}\n />\n <DetailRow\n label={tWithFallback(\n t,\n 'assethandler.assets.detail.fields.assetTag',\n 'Asset Tag'\n )}\n value={asset.assetNumber}\n />\n </dl>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>\n {tWithFallback(\n t,\n 'assethandler.assets.detail.sections.assignmentLocation',\n 'Assignment & Location'\n )}\n </CardTitle>\n </CardHeader>\n <CardContent>\n <dl className=\"space-y-3 text-sm\">\n <DetailRow\n label={tWithFallback(\n t,\n 'assethandler.assets.detail.fields.assignedTo',\n 'Assigned To'\n )}\n value={asset.assignedTo || '—'}\n icon={<User className=\"h-3.5 w-3.5\" />}\n />\n <DetailRow\n label={tWithFallback(\n t,\n 'assethandler.assets.detail.fields.location',\n 'Location'\n )}\n value={asset.locationName || '—'}\n icon={<MapPin className=\"h-3.5 w-3.5\" />}\n />\n </dl>\n <Separator className=\"my-4\" />\n <div>\n <h4 className=\"text-sm font-medium mb-2 flex items-center gap-2\">\n <Tag className=\"h-3.5 w-3.5\" />\n {tWithFallback(t, 'assethandler.assets.detail.fields.tags', 'Tags')}\n </h4>\n {asset.tags.length === 0 ? (\n <p className=\"text-xs text-text-secondary\">\n {tWithFallback(t, 'assethandler.assets.detail.fields.noTags', 'No tags yet')}\n </p>\n ) : (\n <div className=\"flex flex-wrap gap-1.5\">\n {asset.tags.map((tag) => (\n <Badge key={tag} variant=\"secondary\" className=\"text-xs\">\n {tag}\n </Badge>\n ))}\n </div>\n )}\n </div>\n </CardContent>\n </Card>\n </div>\n </TabsContent>\n\n <TabsContent value=\"maintenance\" className=\"mt-4\">\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Wrench className=\"h-4 w-4\" />\n {tWithFallback(\n t,\n 'assethandler.assets.detail.maintenance.title',\n 'Maintenance History'\n )}\n </CardTitle>\n <CardDescription>\n {assetMaintenance.length}{' '}\n {tWithFallback(\n t,\n 'assethandler.assets.detail.maintenance.recordsFound',\n 'records found'\n )}\n </CardDescription>\n </CardHeader>\n <CardContent>\n {assetMaintenance.length === 0 ? (\n <p className=\"text-center text-text-secondary py-8\">\n {tWithFallback(\n t,\n 'assethandler.assets.detail.maintenance.empty',\n 'No maintenance records for this asset.'\n )}\n </p>\n ) : (\n <div className=\"space-y-3\">\n {assetMaintenance.map((m) => (\n <div key={m.id} className=\"flex items-start gap-4 rounded-lg border p-4\">\n <div className=\"flex-1\">\n <div className=\"flex items-center gap-2\">\n <Badge variant=\"outline\" className=\"capitalize\">\n {m.type}\n </Badge>\n <Badge\n variant={m.status === 'completed' ? 'default' : 'secondary'}\n className=\"capitalize\"\n >\n {m.status.replace(/_/g, ' ')}\n </Badge>\n </div>\n <p className=\"font-medium mt-1\">{m.title}</p>\n <p className=\"text-sm text-text-secondary\">{m.description}</p>\n <div className=\"flex gap-4 mt-2 text-xs text-text-secondary\">\n <span>\n {tWithFallback(\n t,\n 'assethandler.assets.detail.maintenance.scheduled',\n 'Scheduled'\n )}\n :{' '}\n {m.scheduledDate ? new Date(m.scheduledDate).toLocaleDateString() : '—'}\n </span>\n {m.actualCost != null || m.estimatedCost != null ? (\n <span>\n {tWithFallback(\n t,\n 'assethandler.assets.detail.maintenance.cost',\n 'Cost'\n )}\n : ${(m.actualCost ?? m.estimatedCost ?? 0).toLocaleString()}\n </span>\n ) : null}\n </div>\n </div>\n </div>\n ))}\n </div>\n )}\n </CardContent>\n </Card>\n </TabsContent>\n </Tabs>\n </div>\n );\n}\n\nfunction DetailRow({\n label,\n value,\n icon,\n}: {\n label: string;\n value: string;\n icon?: React.ReactNode;\n}) {\n return (\n <div className=\"flex items-start justify-between gap-4\">\n <dt className=\"text-text-secondary flex items-center gap-1.5 shrink-0\">\n {icon}\n {label}\n </dt>\n <dd className=\"font-medium text-right capitalize\">{value}</dd>\n </div>\n );\n}\n"],"mappings":"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"}