@burdenoff/microfe-assethandler 2026.625.2 → 2026.703.1

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 (76) hide show
  1. package/dist/assethandler/AssetHandlerRoot.js +0 -24
  2. package/dist/assethandler/AssetHandlerRoot.js.map +1 -1
  3. package/dist/assethandler/AssetHandlerRoutes.js +92 -160
  4. package/dist/assethandler/AssetHandlerRoutes.js.map +1 -1
  5. package/dist/assethandler/pages/AnalyticsPage.js +367 -402
  6. package/dist/assethandler/pages/AnalyticsPage.js.map +1 -1
  7. package/dist/assethandler/pages/AssetsAssetCategoriesPage.js +29 -26
  8. package/dist/assethandler/pages/AssetsAssetCategoriesPage.js.map +1 -1
  9. package/dist/assethandler/pages/AssetsAssetCheckInOutPage.js +278 -164
  10. package/dist/assethandler/pages/AssetsAssetCheckInOutPage.js.map +1 -1
  11. package/dist/assethandler/pages/AssetsAssetCreatePage.js +200 -242
  12. package/dist/assethandler/pages/AssetsAssetCreatePage.js.map +1 -1
  13. package/dist/assethandler/pages/AssetsAssetDetailPage.js +192 -286
  14. package/dist/assethandler/pages/AssetsAssetDetailPage.js.map +1 -1
  15. package/dist/assethandler/pages/AssetsAssetListPage.js +204 -296
  16. package/dist/assethandler/pages/AssetsAssetListPage.js.map +1 -1
  17. package/dist/assethandler/pages/AssetsAssetTrackingPage.js +38 -42
  18. package/dist/assethandler/pages/AssetsAssetTrackingPage.js.map +1 -1
  19. package/dist/assethandler/pages/DashboardPage.js +212 -236
  20. package/dist/assethandler/pages/DashboardPage.js.map +1 -1
  21. package/dist/assethandler/pages/ItilIncidentDetailPage.js +41 -85
  22. package/dist/assethandler/pages/ItilIncidentDetailPage.js.map +1 -1
  23. package/dist/assethandler/pages/MaintenanceMaintenanceCalendarPage.js +1 -1
  24. package/dist/assethandler/pages/MaintenanceMaintenanceCalendarPage.js.map +1 -1
  25. package/dist/assethandler/pages/MaintenanceMaintenanceSchedulerPage.js +37 -86
  26. package/dist/assethandler/pages/MaintenanceMaintenanceSchedulerPage.js.map +1 -1
  27. package/dist/assethandler/pages/OperationsMaintenanceDetailPage.js +82 -98
  28. package/dist/assethandler/pages/OperationsMaintenanceDetailPage.js.map +1 -1
  29. package/dist/assethandler/pages/OperationsOperationsHubPage.js +6 -22
  30. package/dist/assethandler/pages/OperationsOperationsHubPage.js.map +1 -1
  31. package/dist/assethandler/pages/OperationsWorkOrderDetailPage.js +4 -34
  32. package/dist/assethandler/pages/OperationsWorkOrderDetailPage.js.map +1 -1
  33. package/dist/assethandler/pages/PortfolioPortfolioOverviewPage.js +105 -150
  34. package/dist/assethandler/pages/PortfolioPortfolioOverviewPage.js.map +1 -1
  35. package/dist/assethandler/pages/TransactionsTransactionDetailPage.js +116 -152
  36. package/dist/assethandler/pages/TransactionsTransactionDetailPage.js.map +1 -1
  37. package/dist/assethandler/providers/AssetHandlerProvider.js.map +1 -1
  38. package/dist/assethandler/store/assethandlerStore.js +68 -2206
  39. package/dist/assethandler/store/assethandlerStore.js.map +1 -1
  40. package/dist/assethandler/utils/toast.js +33 -0
  41. package/dist/assethandler/utils/toast.js.map +1 -0
  42. package/package.json +5 -4
  43. package/dist/assethandler/pages/AssetsAssetEditPage.js +0 -353
  44. package/dist/assethandler/pages/AssetsAssetEditPage.js.map +0 -1
  45. package/dist/assethandler/pages/AuditTrailPage.js +0 -215
  46. package/dist/assethandler/pages/AuditTrailPage.js.map +0 -1
  47. package/dist/assethandler/pages/MarketplaceMarketplaceDetailPage.js +0 -177
  48. package/dist/assethandler/pages/MarketplaceMarketplaceDetailPage.js.map +0 -1
  49. package/dist/assethandler/pages/MarketplaceMarketplaceListPage.js +0 -162
  50. package/dist/assethandler/pages/MarketplaceMarketplaceListPage.js.map +0 -1
  51. package/dist/assethandler/pages/MarketplaceMarketplaceOrdersPage.js +0 -143
  52. package/dist/assethandler/pages/MarketplaceMarketplaceOrdersPage.js.map +0 -1
  53. package/dist/assethandler/pages/MarketplaceMarketplaceSellPage.js +0 -163
  54. package/dist/assethandler/pages/MarketplaceMarketplaceSellPage.js.map +0 -1
  55. package/dist/assethandler/pages/ReportsReportBuilderPage.js +0 -208
  56. package/dist/assethandler/pages/ReportsReportBuilderPage.js.map +0 -1
  57. package/dist/assethandler/pages/ReportsReportsDashboardPage.js +0 -236
  58. package/dist/assethandler/pages/ReportsReportsDashboardPage.js.map +0 -1
  59. package/dist/assethandler/pages/ReportsReportsListPage.js +0 -144
  60. package/dist/assethandler/pages/ReportsReportsListPage.js.map +0 -1
  61. package/dist/assethandler/pages/SecurityScheduleBackupPage.js +0 -149
  62. package/dist/assethandler/pages/SecurityScheduleBackupPage.js.map +0 -1
  63. package/dist/assethandler/pages/UsersPage.js +0 -208
  64. package/dist/assethandler/pages/UsersPage.js.map +0 -1
  65. package/dist/assethandler/pages/UsersUserCreatePage.js +0 -220
  66. package/dist/assethandler/pages/UsersUserCreatePage.js.map +0 -1
  67. package/dist/assethandler/pages/UsersUserManagementHubPage.js +0 -373
  68. package/dist/assethandler/pages/UsersUserManagementHubPage.js.map +0 -1
  69. package/dist/assethandler/pages/WorkflowsWorkflowBuilderPage.js +0 -264
  70. package/dist/assethandler/pages/WorkflowsWorkflowBuilderPage.js.map +0 -1
  71. package/dist/assethandler/pages/WorkflowsWorkflowExecutionsPage.js +0 -206
  72. package/dist/assethandler/pages/WorkflowsWorkflowExecutionsPage.js.map +0 -1
  73. package/dist/assethandler/pages/WorkflowsWorkflowListPage.js +0 -171
  74. package/dist/assethandler/pages/WorkflowsWorkflowListPage.js.map +0 -1
  75. package/dist/assethandler/pages/WorkflowsWorkflowTemplatesPage.js +0 -173
  76. package/dist/assethandler/pages/WorkflowsWorkflowTemplatesPage.js.map +0 -1
@@ -1,288 +1,243 @@
1
1
  import { useAssetHandlerStore as e } from "../store/assethandlerStore.js";
2
2
  import { tWithFallback as t } from "../utils/i18n.js";
3
- import { ArrowLeft as n, Building as r, Calendar as i, Clock as a, DollarSign as o, Download as s, Edit as c, MapPin as l, Tag as u, User as d, Wrench as f } from "lucide-react";
4
- import { useNavigate as p, useParams as m } from "react-router-dom";
5
- import { Badge as h, Button as g, Card as _, CardContent as v, CardDescription as y, CardHeader as b, CardTitle as x, EmphasisPanel as S, GradientText as C, IllustratedEmptyState as w, NextSteps as T, PagePurpose as E, Separator as D, Tabs as O, TabsContent as k, TabsList as A, TabsTrigger as j } from "@burdenoff/fe-libs/ui";
6
- import { useI18n as M } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
7
- import { jsx as N, jsxs as P } from "react/jsx-runtime";
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";
8
10
  //#region src/assethandler/pages/AssetsAssetDetailPage.tsx
9
- var F = {
11
+ var P = M`
12
+ query AssetHandlerAsset($id: ID!) {
13
+ asset(id: $id) {
14
+ id
15
+ assetNumber
16
+ name
17
+ description
18
+ category
19
+ status
20
+ condition
21
+ serialNumber
22
+ locationName
23
+ assignedTo
24
+ tags
25
+ createdAt
26
+ updatedAt
27
+ }
28
+ }
29
+ `, F = {
10
30
  active: "default",
11
31
  inactive: "outline",
12
- under_maintenance: "secondary",
13
- disposed: "destructive",
14
- reserved: "secondary",
15
- in_transit: "outline"
32
+ maintenance: "secondary",
33
+ retired: "outline",
34
+ disposed: "destructive"
16
35
  }, I = {
17
36
  excellent: "text-status-success-text bg-status-success-bg-subtle",
18
37
  good: "text-status-info-text bg-status-info-bg-subtle",
19
38
  fair: "text-status-warning-text bg-status-warning-bg-subtle",
20
39
  poor: "text-status-warning-text bg-status-warning-bg-subtle",
21
- non_functional: "text-status-error-text bg-status-error-bg-subtle"
40
+ damaged: "text-status-error-text bg-status-error-bg-subtle"
22
41
  };
23
42
  function L() {
24
- let { t: L } = M(), z = p(), { assetId: B } = m(), { assets: V, maintenanceRecords: H } = e(), U = V.find((e) => e.id === B || e.assetTag === B) ?? V[0];
25
- if (!U) return /* @__PURE__ */ N("div", {
43
+ let { t: M } = O(), L = l(), { assetId: z } = u(), { maintenanceRecords: B } = e(), { data: V, loading: H } = N(P, {
44
+ variables: { id: z ?? "" },
45
+ skip: !z,
46
+ fetchPolicy: "cache-and-network"
47
+ });
48
+ if (H && !V) return /* @__PURE__ */ A("div", {
49
+ 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
+ });
52
+ let U = V?.asset;
53
+ if (!U) return /* @__PURE__ */ A("div", {
26
54
  className: "p-6",
27
- children: /* @__PURE__ */ N(w, {
55
+ children: /* @__PURE__ */ A(b, {
28
56
  illustration: "empty-search",
29
- title: t(L, "assethandler.assets.detail.notFound", "Asset not found"),
57
+ title: t(M, "assethandler.assets.detail.notFound", "Asset not found"),
30
58
  description: "This asset may have been disposed or removed. Return to the inventory to find it.",
31
- action: /* @__PURE__ */ N(g, {
59
+ action: /* @__PURE__ */ A(f, {
32
60
  size: "sm",
33
- onClick: () => z("/assets/asset-list"),
61
+ onClick: () => L("/assets/asset-list"),
34
62
  children: "Back to inventory"
35
63
  })
36
64
  })
37
65
  });
38
- let W = H.filter((e) => e.assetId === U.id), G = U.value - U.currentValue, K = (G / U.value * 100).toFixed(1);
39
- return /* @__PURE__ */ P("div", {
66
+ let W = {
67
+ ...U,
68
+ status: U.status.toLowerCase(),
69
+ condition: U.condition.toLowerCase(),
70
+ category: U.category.toLowerCase()
71
+ }, G = B.filter((e) => e.assetId === W.id), K = G.filter((e) => e.status !== "completed" && e.status !== "cancelled");
72
+ return /* @__PURE__ */ j("div", {
40
73
  className: "space-y-6 p-6",
41
74
  children: [
42
- /* @__PURE__ */ P("div", {
75
+ /* @__PURE__ */ A("div", {
43
76
  className: "flex items-center justify-between",
44
- children: [/* @__PURE__ */ P("div", {
77
+ children: /* @__PURE__ */ j("div", {
45
78
  className: "flex items-center gap-4",
46
- children: [/* @__PURE__ */ N(g, {
79
+ children: [/* @__PURE__ */ A(f, {
47
80
  variant: "ghost",
48
81
  size: "icon",
49
- onClick: () => z("/assets/asset-list"),
50
- children: /* @__PURE__ */ N(n, { className: "h-4 w-4" })
51
- }), /* @__PURE__ */ P("div", { children: [/* @__PURE__ */ P("div", {
82
+ onClick: () => L("/assets/asset-list"),
83
+ children: /* @__PURE__ */ A(n, { className: "h-4 w-4" })
84
+ }), /* @__PURE__ */ j("div", { children: [/* @__PURE__ */ j("div", {
52
85
  className: "flex items-center gap-3",
53
86
  children: [
54
- /* @__PURE__ */ N("h1", {
87
+ /* @__PURE__ */ A("h1", {
55
88
  className: "text-2xl font-bold",
56
- children: /* @__PURE__ */ N(C, { children: U.name })
89
+ children: /* @__PURE__ */ A(y, { children: W.name })
57
90
  }),
58
- /* @__PURE__ */ N(h, {
59
- variant: F[U.status],
60
- children: U.status.replace("_", " ")
91
+ /* @__PURE__ */ A(d, {
92
+ variant: F[W.status] ?? "outline",
93
+ children: W.status.replace(/_/g, " ")
61
94
  }),
62
- /* @__PURE__ */ N("span", {
63
- className: `rounded-md px-2 py-0.5 text-xs font-medium ${I[U.condition]}`,
64
- children: U.condition
95
+ /* @__PURE__ */ A("span", {
96
+ className: `rounded-md px-2 py-0.5 text-xs font-medium ${I[W.condition] ?? ""}`,
97
+ children: W.condition
65
98
  })
66
99
  ]
67
- }), /* @__PURE__ */ P("p", {
100
+ }), /* @__PURE__ */ j("p", {
68
101
  className: "text-sm text-text-secondary mt-1",
69
- children: [
70
- U.assetTag,
71
- " · SN: ",
72
- U.serialNumber
73
- ]
102
+ children: [W.assetNumber, W.serialNumber ? /* @__PURE__ */ j(k, { children: [" · SN: ", W.serialNumber] }) : null]
74
103
  })] })]
75
- }), /* @__PURE__ */ P("div", {
76
- className: "flex gap-2",
77
- children: [/* @__PURE__ */ P(g, {
78
- variant: "outline",
79
- size: "sm",
80
- children: [/* @__PURE__ */ N(s, { className: "mr-2 h-4 w-4" }), t(L, "assethandler.assets.detail.actions.export", "Export")]
81
- }), /* @__PURE__ */ P(g, {
82
- size: "sm",
83
- onClick: () => z(`/assets/${U.id}/edit`),
84
- children: [/* @__PURE__ */ N(c, { className: "mr-2 h-4 w-4" }), t(L, "assethandler.assets.detail.actions.editAsset", "Edit Asset")]
85
- })]
86
- })]
104
+ })
87
105
  }),
88
- /* @__PURE__ */ N(E, { children: t(L, "assethandler.assets.detail.purpose", "The complete profile of a single asset — its identity, value, condition, location, assignment and full maintenance history. Use this page as the asset's home base: edit its details, check it in or out, and schedule the next service.") }),
89
- /* @__PURE__ */ N(T, {
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, {
90
108
  storageKey: "assethandler-asset-detail",
91
109
  steps: [
92
- {
93
- id: "edit",
94
- label: "Edit asset details",
95
- description: "Update value, status, location or assignment.",
96
- onClick: () => z(`/assets/${U.id}/edit`)
97
- },
98
110
  {
99
111
  id: "checkinout",
100
112
  label: "Check this asset in or out",
101
113
  description: "Record who is using it and when it returns.",
102
- onClick: () => z("/assets/asset-check-in-out")
114
+ onClick: () => L("/assets/asset-check-in-out")
103
115
  },
104
116
  {
105
117
  id: "maintenance",
106
118
  label: "Schedule maintenance",
107
119
  description: "Plan the next service before it is overdue.",
108
- onClick: () => z("/maintenance/maintenance-scheduler")
120
+ onClick: () => L("/maintenance/maintenance-scheduler")
121
+ },
122
+ {
123
+ id: "operations",
124
+ label: "Raise a work order",
125
+ description: "Create corrective or preventive work for this asset.",
126
+ onClick: () => L("/operations/operations-hub")
109
127
  }
110
128
  ]
111
129
  }),
112
- /* @__PURE__ */ P("div", {
130
+ /* @__PURE__ */ j("div", {
113
131
  className: "grid gap-4 md:grid-cols-4",
114
132
  children: [
115
- /* @__PURE__ */ P(S, { children: [
116
- /* @__PURE__ */ P("div", {
133
+ /* @__PURE__ */ j(v, { children: [
134
+ /* @__PURE__ */ j("div", {
117
135
  className: "flex items-center gap-2 text-sm text-text-secondary",
118
- children: [/* @__PURE__ */ N(o, { className: "h-4 w-4" }), t(L, "assethandler.assets.detail.stats.currentValue", "Current Value")]
136
+ children: [/* @__PURE__ */ A(c, { className: "h-4 w-4" }), t(M, "assethandler.assets.detail.stats.maintenanceRecords", "Maintenance Records")]
119
137
  }),
120
- /* @__PURE__ */ P("p", {
138
+ /* @__PURE__ */ A("p", {
121
139
  className: "text-2xl font-bold mt-1 tabular-nums",
122
- children: ["$", U.currentValue.toLocaleString()]
140
+ children: G.length
123
141
  }),
124
- /* @__PURE__ */ P("p", {
142
+ /* @__PURE__ */ j("p", {
125
143
  className: "text-xs text-text-secondary",
126
144
  children: [
127
- t(L, "assethandler.assets.detail.stats.original", "Original"),
128
- ": $",
129
- U.value.toLocaleString()
145
+ K.length,
146
+ " ",
147
+ t(M, "assethandler.assets.detail.stats.open", "open")
130
148
  ]
131
149
  })
132
150
  ] }),
133
- /* @__PURE__ */ N(_, { children: /* @__PURE__ */ P(v, {
151
+ /* @__PURE__ */ A(p, { children: /* @__PURE__ */ j(m, {
134
152
  className: "pt-4",
135
- children: [
136
- /* @__PURE__ */ N("div", {
137
- className: "flex items-center gap-2 text-sm text-text-secondary",
138
- children: t(L, "assethandler.assets.detail.stats.depreciation", "Depreciation")
139
- }),
140
- /* @__PURE__ */ P("p", {
141
- className: "text-2xl font-bold mt-1 text-status-error-text",
142
- children: ["-$", G.toLocaleString()]
143
- }),
144
- /* @__PURE__ */ P("p", {
145
- className: "text-xs text-text-secondary",
146
- children: [
147
- K,
148
- "% ·",
149
- " ",
150
- t(L, "assethandler.assets.detail.stats.rate", "Rate"),
151
- ":",
152
- " ",
153
- U.depreciationRate,
154
- "%/yr"
155
- ]
156
- })
157
- ]
153
+ children: [/* @__PURE__ */ j("div", {
154
+ 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", {
157
+ className: "text-lg font-bold mt-1",
158
+ children: W.createdAt ? new Date(W.createdAt).toLocaleDateString() : "—"
159
+ })]
158
160
  }) }),
159
- /* @__PURE__ */ N(_, { children: /* @__PURE__ */ P(v, {
161
+ /* @__PURE__ */ A(p, { children: /* @__PURE__ */ j(m, {
160
162
  className: "pt-4",
161
- children: [
162
- /* @__PURE__ */ P("div", {
163
- className: "flex items-center gap-2 text-sm text-text-secondary",
164
- children: [/* @__PURE__ */ N(i, { className: "h-4 w-4" }), t(L, "assethandler.assets.detail.stats.warranty", "Warranty")]
165
- }),
166
- /* @__PURE__ */ N("p", {
167
- className: "text-lg font-bold mt-1",
168
- children: U.warrantyExpiry
169
- }),
170
- /* @__PURE__ */ P("p", {
171
- className: "text-xs text-text-secondary",
172
- children: [
173
- t(L, "assethandler.assets.detail.stats.purchased", "Purchased"),
174
- ":",
175
- " ",
176
- U.purchaseDate
177
- ]
178
- })
179
- ]
163
+ children: [/* @__PURE__ */ j("div", {
164
+ 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", {
167
+ className: "text-lg font-bold mt-1",
168
+ children: W.updatedAt ? new Date(W.updatedAt).toLocaleDateString() : "—"
169
+ })]
180
170
  }) }),
181
- /* @__PURE__ */ N(_, { children: /* @__PURE__ */ P(v, {
171
+ /* @__PURE__ */ A(p, { children: /* @__PURE__ */ j(m, {
182
172
  className: "pt-4",
183
- children: [
184
- /* @__PURE__ */ P("div", {
185
- className: "flex items-center gap-2 text-sm text-text-secondary",
186
- children: [/* @__PURE__ */ N(a, { className: "h-4 w-4" }), t(L, "assethandler.assets.detail.stats.lastAudit", "Last Audit")]
187
- }),
188
- /* @__PURE__ */ N("p", {
189
- className: "text-lg font-bold mt-1",
190
- children: U.lastAuditDate
191
- }),
192
- /* @__PURE__ */ P("p", {
193
- className: "text-xs text-text-secondary",
194
- children: [
195
- W.length,
196
- " ",
197
- t(L, "assethandler.assets.detail.stats.maintenanceRecords", "maintenance records")
198
- ]
199
- })
200
- ]
173
+ children: [/* @__PURE__ */ j("div", {
174
+ 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", {
177
+ className: "text-lg font-bold mt-1 truncate",
178
+ children: W.locationName || "—"
179
+ })]
201
180
  }) })
202
181
  ]
203
182
  }),
204
- /* @__PURE__ */ P(O, {
183
+ /* @__PURE__ */ j(w, {
205
184
  defaultValue: "details",
206
185
  children: [
207
- /* @__PURE__ */ P(A, { children: [
208
- /* @__PURE__ */ N(j, {
209
- value: "details",
210
- children: t(L, "assethandler.assets.detail.tabs.details", "Details")
211
- }),
212
- /* @__PURE__ */ N(j, {
213
- value: "maintenance",
214
- children: t(L, "assethandler.assets.detail.tabs.maintenance", "Maintenance")
215
- }),
216
- /* @__PURE__ */ N(j, {
217
- value: "financial",
218
- children: t(L, "assethandler.assets.detail.tabs.financial", "Financial")
219
- })
220
- ] }),
221
- /* @__PURE__ */ N(k, {
186
+ /* @__PURE__ */ j(E, { children: [/* @__PURE__ */ A(D, {
187
+ value: "details",
188
+ children: t(M, "assethandler.assets.detail.tabs.details", "Details")
189
+ }), /* @__PURE__ */ A(D, {
190
+ value: "maintenance",
191
+ children: t(M, "assethandler.assets.detail.tabs.maintenance", "Maintenance")
192
+ })] }),
193
+ /* @__PURE__ */ A(T, {
222
194
  value: "details",
223
195
  className: "space-y-6 mt-4",
224
- children: /* @__PURE__ */ P("div", {
196
+ children: /* @__PURE__ */ j("div", {
225
197
  className: "grid gap-6 lg:grid-cols-2",
226
- children: [/* @__PURE__ */ P(_, { children: [/* @__PURE__ */ N(b, { children: /* @__PURE__ */ N(x, { children: t(L, "assethandler.assets.detail.sections.generalInformation", "General Information") }) }), /* @__PURE__ */ N(v, { children: /* @__PURE__ */ P("dl", {
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", {
227
199
  className: "space-y-3 text-sm",
228
200
  children: [
229
- /* @__PURE__ */ N(R, {
230
- label: t(L, "assethandler.assets.detail.fields.description", "Description"),
231
- value: U.description
232
- }),
233
- /* @__PURE__ */ N(R, {
234
- label: t(L, "assethandler.assets.detail.fields.category", "Category"),
235
- value: U.category.replace("_", " ")
236
- }),
237
- /* @__PURE__ */ N(R, {
238
- label: t(L, "assethandler.assets.detail.fields.manufacturer", "Manufacturer"),
239
- value: U.manufacturer
240
- }),
241
- /* @__PURE__ */ N(R, {
242
- label: t(L, "assethandler.assets.detail.fields.model", "Model"),
243
- value: U.model
201
+ /* @__PURE__ */ A(R, {
202
+ label: t(M, "assethandler.assets.detail.fields.description", "Description"),
203
+ value: W.description || "—"
244
204
  }),
245
- /* @__PURE__ */ N(R, {
246
- label: t(L, "assethandler.assets.detail.fields.vendor", "Vendor"),
247
- value: U.vendor
205
+ /* @__PURE__ */ A(R, {
206
+ label: t(M, "assethandler.assets.detail.fields.category", "Category"),
207
+ value: W.category.replace(/_/g, " ")
248
208
  }),
249
- /* @__PURE__ */ N(R, {
250
- label: t(L, "assethandler.assets.detail.fields.serialNumber", "Serial Number"),
251
- value: U.serialNumber
209
+ /* @__PURE__ */ A(R, {
210
+ label: t(M, "assethandler.assets.detail.fields.serialNumber", "Serial Number"),
211
+ value: W.serialNumber || "—"
252
212
  }),
253
- /* @__PURE__ */ N(R, {
254
- label: t(L, "assethandler.assets.detail.fields.assetTag", "Asset Tag"),
255
- value: U.assetTag
213
+ /* @__PURE__ */ A(R, {
214
+ label: t(M, "assethandler.assets.detail.fields.assetTag", "Asset Tag"),
215
+ value: W.assetNumber
256
216
  })
257
217
  ]
258
- }) })] }), /* @__PURE__ */ P(_, { children: [/* @__PURE__ */ N(b, { children: /* @__PURE__ */ N(x, { children: t(L, "assethandler.assets.detail.sections.assignmentLocation", "Assignment & Location") }) }), /* @__PURE__ */ P(v, { children: [
259
- /* @__PURE__ */ P("dl", {
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", {
260
220
  className: "space-y-3 text-sm",
261
- children: [
262
- /* @__PURE__ */ N(R, {
263
- label: t(L, "assethandler.assets.detail.fields.assignedTo", "Assigned To"),
264
- value: U.assignedTo,
265
- icon: /* @__PURE__ */ N(d, { className: "h-3.5 w-3.5" })
266
- }),
267
- /* @__PURE__ */ N(R, {
268
- label: t(L, "assethandler.assets.detail.fields.department", "Department"),
269
- value: U.department,
270
- icon: /* @__PURE__ */ N(r, { className: "h-3.5 w-3.5" })
271
- }),
272
- /* @__PURE__ */ N(R, {
273
- label: t(L, "assethandler.assets.detail.fields.location", "Location"),
274
- value: U.location,
275
- icon: /* @__PURE__ */ N(l, { className: "h-3.5 w-3.5" })
276
- })
277
- ]
221
+ children: [/* @__PURE__ */ A(R, {
222
+ label: t(M, "assethandler.assets.detail.fields.assignedTo", "Assigned To"),
223
+ 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"),
227
+ value: W.locationName || "—",
228
+ icon: /* @__PURE__ */ A(a, { className: "h-3.5 w-3.5" })
229
+ })]
278
230
  }),
279
- /* @__PURE__ */ N(D, { className: "my-4" }),
280
- /* @__PURE__ */ P("div", { children: [/* @__PURE__ */ P("h4", {
231
+ /* @__PURE__ */ A(C, { className: "my-4" }),
232
+ /* @__PURE__ */ j("div", { children: [/* @__PURE__ */ j("h4", {
281
233
  className: "text-sm font-medium mb-2 flex items-center gap-2",
282
- children: [/* @__PURE__ */ N(u, { className: "h-3.5 w-3.5" }), t(L, "assethandler.assets.detail.fields.tags", "Tags")]
283
- }), /* @__PURE__ */ N("div", {
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", {
236
+ className: "text-xs text-text-secondary",
237
+ children: t(M, "assethandler.assets.detail.fields.noTags", "No tags yet")
238
+ }) : /* @__PURE__ */ A("div", {
284
239
  className: "flex flex-wrap gap-1.5",
285
- children: U.tags.map((e) => /* @__PURE__ */ N(h, {
240
+ children: W.tags.map((e) => /* @__PURE__ */ A(d, {
286
241
  variant: "secondary",
287
242
  className: "text-xs",
288
243
  children: e
@@ -291,112 +246,63 @@ function L() {
291
246
  ] })] })]
292
247
  })
293
248
  }),
294
- /* @__PURE__ */ N(k, {
249
+ /* @__PURE__ */ A(T, {
295
250
  value: "maintenance",
296
251
  className: "mt-4",
297
- children: /* @__PURE__ */ P(_, { children: [/* @__PURE__ */ P(b, { children: [/* @__PURE__ */ P(x, {
252
+ children: /* @__PURE__ */ j(p, { children: [/* @__PURE__ */ j(g, { children: [/* @__PURE__ */ j(_, {
298
253
  className: "flex items-center gap-2",
299
- children: [/* @__PURE__ */ N(f, { className: "h-4 w-4" }), t(L, "assethandler.assets.detail.maintenance.title", "Maintenance History")]
300
- }), /* @__PURE__ */ P(y, { children: [
301
- W.length,
254
+ children: [/* @__PURE__ */ A(c, { className: "h-4 w-4" }), t(M, "assethandler.assets.detail.maintenance.title", "Maintenance History")]
255
+ }), /* @__PURE__ */ j(h, { children: [
256
+ G.length,
302
257
  " ",
303
- t(L, "assethandler.assets.detail.maintenance.recordsFound", "records found")
304
- ] })] }), /* @__PURE__ */ N(v, { children: W.length === 0 ? /* @__PURE__ */ N("p", {
258
+ t(M, "assethandler.assets.detail.maintenance.recordsFound", "records found")
259
+ ] })] }), /* @__PURE__ */ A(m, { children: G.length === 0 ? /* @__PURE__ */ A("p", {
305
260
  className: "text-center text-text-secondary py-8",
306
- children: t(L, "assethandler.assets.detail.maintenance.empty", "No maintenance records for this asset.")
307
- }) : /* @__PURE__ */ N("div", {
261
+ children: t(M, "assethandler.assets.detail.maintenance.empty", "No maintenance records for this asset.")
262
+ }) : /* @__PURE__ */ A("div", {
308
263
  className: "space-y-3",
309
- children: W.map((e) => /* @__PURE__ */ N("div", {
264
+ children: G.map((e) => /* @__PURE__ */ A("div", {
310
265
  className: "flex items-start gap-4 rounded-lg border p-4",
311
- children: /* @__PURE__ */ P("div", {
266
+ children: /* @__PURE__ */ j("div", {
312
267
  className: "flex-1",
313
268
  children: [
314
- /* @__PURE__ */ P("div", {
269
+ /* @__PURE__ */ j("div", {
315
270
  className: "flex items-center gap-2",
316
- children: [
317
- /* @__PURE__ */ N("span", {
318
- className: "font-mono text-xs text-text-secondary",
319
- children: e.id
320
- }),
321
- /* @__PURE__ */ N(h, {
322
- variant: "outline",
323
- children: e.type
324
- }),
325
- /* @__PURE__ */ N(h, {
326
- variant: e.status === "completed" ? "default" : "secondary",
327
- children: e.status.replace("_", " ")
328
- })
329
- ]
271
+ children: [/* @__PURE__ */ A(d, {
272
+ variant: "outline",
273
+ className: "capitalize",
274
+ children: e.type
275
+ }), /* @__PURE__ */ A(d, {
276
+ variant: e.status === "completed" ? "default" : "secondary",
277
+ className: "capitalize",
278
+ children: e.status.replace(/_/g, " ")
279
+ })]
330
280
  }),
331
- /* @__PURE__ */ N("p", {
281
+ /* @__PURE__ */ A("p", {
332
282
  className: "font-medium mt-1",
333
283
  children: e.title
334
284
  }),
335
- /* @__PURE__ */ N("p", {
285
+ /* @__PURE__ */ A("p", {
336
286
  className: "text-sm text-text-secondary",
337
287
  children: e.description
338
288
  }),
339
- /* @__PURE__ */ P("div", {
289
+ /* @__PURE__ */ j("div", {
340
290
  className: "flex gap-4 mt-2 text-xs text-text-secondary",
341
- children: [
342
- /* @__PURE__ */ P("span", { children: [
343
- t(L, "assethandler.assets.detail.maintenance.scheduled", "Scheduled"),
344
- ": ",
345
- e.scheduledDate
346
- ] }),
347
- /* @__PURE__ */ P("span", { children: [
348
- t(L, "assethandler.assets.detail.maintenance.cost", "Cost"),
349
- ": $",
350
- e.cost
351
- ] }),
352
- /* @__PURE__ */ P("span", { children: [
353
- t(L, "assethandler.assets.detail.maintenance.assigned", "Assigned"),
354
- ": ",
355
- e.assignedTo
356
- ] })
357
- ]
291
+ children: [/* @__PURE__ */ j("span", { children: [
292
+ t(M, "assethandler.assets.detail.maintenance.scheduled", "Scheduled"),
293
+ ":",
294
+ " ",
295
+ 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"),
298
+ ": $",
299
+ (e.actualCost ?? e.estimatedCost ?? 0).toLocaleString()
300
+ ] }) : null]
358
301
  })
359
302
  ]
360
303
  })
361
304
  }, e.id))
362
305
  }) })] })
363
- }),
364
- /* @__PURE__ */ N(k, {
365
- value: "financial",
366
- className: "mt-4",
367
- children: /* @__PURE__ */ P(_, { children: [/* @__PURE__ */ N(b, { children: /* @__PURE__ */ N(x, { children: t(L, "assethandler.assets.detail.financial.title", "Financial Details") }) }), /* @__PURE__ */ N(v, { children: /* @__PURE__ */ P("dl", {
368
- className: "grid grid-cols-2 gap-4 text-sm",
369
- children: [
370
- /* @__PURE__ */ N(R, {
371
- label: t(L, "assethandler.assets.detail.financial.purchasePrice", "Purchase Price"),
372
- value: `$${U.value.toLocaleString()}`
373
- }),
374
- /* @__PURE__ */ N(R, {
375
- label: t(L, "assethandler.assets.detail.financial.currentValue", "Current Value"),
376
- value: `$${U.currentValue.toLocaleString()}`
377
- }),
378
- /* @__PURE__ */ N(R, {
379
- label: t(L, "assethandler.assets.detail.financial.depreciation", "Depreciation"),
380
- value: `-$${G.toLocaleString()} (${K}%)`
381
- }),
382
- /* @__PURE__ */ N(R, {
383
- label: t(L, "assethandler.assets.detail.financial.annualDepreciationRate", "Annual Dep. Rate"),
384
- value: `${U.depreciationRate}%`
385
- }),
386
- /* @__PURE__ */ N(R, {
387
- label: t(L, "assethandler.assets.detail.financial.purchaseDate", "Purchase Date"),
388
- value: U.purchaseDate
389
- }),
390
- /* @__PURE__ */ N(R, {
391
- label: t(L, "assethandler.assets.detail.financial.warrantyExpiry", "Warranty Expiry"),
392
- value: U.warrantyExpiry
393
- }),
394
- /* @__PURE__ */ N(R, {
395
- label: t(L, "assethandler.assets.detail.financial.vendor", "Vendor"),
396
- value: U.vendor
397
- })
398
- ]
399
- }) })] })
400
306
  })
401
307
  ]
402
308
  })
@@ -404,12 +310,12 @@ function L() {
404
310
  });
405
311
  }
406
312
  function R({ label: e, value: t, icon: n }) {
407
- return /* @__PURE__ */ P("div", {
313
+ return /* @__PURE__ */ j("div", {
408
314
  className: "flex items-start justify-between gap-4",
409
- children: [/* @__PURE__ */ P("dt", {
315
+ children: [/* @__PURE__ */ j("dt", {
410
316
  className: "text-text-secondary flex items-center gap-1.5 shrink-0",
411
317
  children: [n, e]
412
- }), /* @__PURE__ */ N("dd", {
318
+ }), /* @__PURE__ */ A("dd", {
413
319
  className: "font-medium text-right capitalize",
414
320
  children: t
415
321
  })]