@burdenoff/microfe-assethandler 2026.713.2 → 2026.714.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/dist/assethandler/components/AttachmentsPanel.d.ts.map +1 -1
  2. package/dist/assethandler/components/AttachmentsPanel.js.map +1 -1
  3. package/dist/assethandler/hooks/useCopy.d.ts +28 -0
  4. package/dist/assethandler/hooks/useCopy.d.ts.map +1 -0
  5. package/dist/assethandler/hooks/useCopy.js +33 -0
  6. package/dist/assethandler/hooks/useCopy.js.map +1 -0
  7. package/dist/assethandler/index.d.ts +1 -1
  8. package/dist/assethandler/index.d.ts.map +1 -1
  9. package/dist/assethandler/pages/AnalyticsPage.d.ts.map +1 -1
  10. package/dist/assethandler/pages/AnalyticsPage.js +259 -258
  11. package/dist/assethandler/pages/AnalyticsPage.js.map +1 -1
  12. package/dist/assethandler/pages/AssetsAssetCategoriesPage.d.ts.map +1 -1
  13. package/dist/assethandler/pages/AssetsAssetCategoriesPage.js +1 -2
  14. package/dist/assethandler/pages/AssetsAssetCategoriesPage.js.map +1 -1
  15. package/dist/assethandler/pages/AssetsAssetDetailPage.d.ts.map +1 -1
  16. package/dist/assethandler/pages/AssetsAssetDetailPage.js +376 -365
  17. package/dist/assethandler/pages/AssetsAssetDetailPage.js.map +1 -1
  18. package/dist/assethandler/pages/AssetsAssetListPage.d.ts.map +1 -1
  19. package/dist/assethandler/pages/AssetsAssetListPage.js +47 -48
  20. package/dist/assethandler/pages/AssetsAssetListPage.js.map +1 -1
  21. package/dist/assethandler/pages/DashboardPage.d.ts.map +1 -1
  22. package/dist/assethandler/pages/DashboardPage.js +236 -236
  23. package/dist/assethandler/pages/DashboardPage.js.map +1 -1
  24. package/dist/assethandler/pages/PortfolioPortfolioOverviewPage.d.ts.map +1 -1
  25. package/dist/assethandler/pages/PortfolioPortfolioOverviewPage.js +126 -125
  26. package/dist/assethandler/pages/PortfolioPortfolioOverviewPage.js.map +1 -1
  27. package/dist/assethandler/pages/TransactionsTransactionListPage.js +127 -127
  28. package/dist/assethandler/pages/TransactionsTransactionListPage.js.map +1 -1
  29. package/dist/assethandler/store/assethandlerStore.d.ts.map +1 -1
  30. package/dist/assethandler/store/assethandlerStore.js.map +1 -1
  31. package/dist/assethandler/types/index.d.ts +20 -0
  32. package/dist/assethandler/types/index.d.ts.map +1 -1
  33. package/dist/types/assistant.d.ts.map +1 -1
  34. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  import { useAssetHandlerStore as e } from "../store/assethandlerStore.js";
2
2
  import { useAssetHandlerNavigate as t } from "../hooks/useAssetHandlerNavigate.js";
3
- import { tWithFallback as n } from "../utils/i18n.js";
3
+ import { useCopy as n } from "../hooks/useCopy.js";
4
4
  import { cn as r } from "../utils/cn.js";
5
5
  import { formatCompact as i, formatCurrencyCompact as a, seriesColor as o } from "../components/charts/chartTheme.js";
6
6
  import { TrendChart as s } from "../components/charts/TrendChart.js";
@@ -10,32 +10,31 @@ import { StatTile as u } from "../components/StatTile.js";
10
10
  import { ChartCard as d } from "../components/ChartCard.js";
11
11
  import "../components/index.js";
12
12
  import { useMemo as f, useState as p } from "react";
13
- import { Activity as m, AlertTriangle as h, ArrowRight as g, Box as _, CalendarClock as ee, CheckCircle as te, ClipboardList as v, Clock as y, Receipt as b, Wrench as x } from "lucide-react";
14
- import { Fragment as S, jsx as C, jsxs as w } from "react/jsx-runtime";
15
- import { AuroraBackground as T, CTAOverflowMenu as ne, GlassCard as E, GradientText as re, IllustratedEmptyState as D, NextSteps as ie, PagePurpose as ae } from "@burdenoff/fe-libs/ui";
16
- import { useI18n as oe } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
13
+ import { Activity as m, AlertTriangle as h, ArrowRight as ee, Box as g, CalendarClock as te, CheckCircle as ne, ClipboardList as _, Clock as re, Receipt as v, Wrench as y } from "lucide-react";
14
+ import { Fragment as ie, jsx as b, jsxs as x } from "react/jsx-runtime";
15
+ import { AuroraBackground as S, CTAOverflowMenu as ae, GlassCard as C, GradientText as oe, IllustratedEmptyState as w, NextSteps as se, PagePurpose as ce } from "@burdenoff/fe-libs/ui";
17
16
  //#region src/assethandler/pages/DashboardPage.tsx
18
- function O(e) {
17
+ function T(e) {
19
18
  return `${e.getFullYear()}-${String(e.getMonth() + 1).padStart(2, "0")}`;
20
19
  }
21
- function k(e) {
20
+ function E(e) {
22
21
  let [t, n] = e.split("-").map(Number);
23
22
  return new Date(t, n - 1, 1).toLocaleString(void 0, { month: "short" });
24
23
  }
25
- function A(e) {
24
+ function D(e) {
26
25
  if (!e) return null;
27
26
  let t = new Date(e);
28
27
  return Number.isNaN(t.getTime()) ? null : t;
29
28
  }
30
- function j(e) {
29
+ function O(e) {
31
30
  return e.replace(/_/g, " ").replace(/\b\w/g, (e) => e.toUpperCase());
32
31
  }
33
- function M(e, t, n, r = 8, i = 6) {
32
+ function k(e, t, n, r = 8, i = 6) {
34
33
  let a = /* @__PURE__ */ new Map(), s = /* @__PURE__ */ new Map();
35
34
  for (let r of e) {
36
- let e = A(t(r));
35
+ let e = D(t(r));
37
36
  if (!e) continue;
38
- let i = O(e), o = n(r) || "other";
37
+ let i = T(e), o = n(r) || "other";
39
38
  a.has(i) || a.set(i, /* @__PURE__ */ new Map());
40
39
  let c = a.get(i);
41
40
  c.set(o, (c.get(o) ?? 0) + 1), s.set(o, (s.get(o) ?? 0) + 1);
@@ -45,14 +44,14 @@ function M(e, t, n, r = 8, i = 6) {
45
44
  series: []
46
45
  };
47
46
  let c = [...s.entries()].sort((e, t) => t[1] - e[1]).map(([e]) => e), l = c.slice(0, i), u = c.length > i, d = new Set(l), f = [...a.keys()].sort().slice(-r).map((e) => {
48
- let t = { month: k(e) };
47
+ let t = { month: E(e) };
49
48
  for (let e of l) t[e] = 0;
50
49
  u && (t.other = 0);
51
50
  for (let [n, r] of a.get(e)) d.has(n) ? t[n] = (t[n] ?? 0) + r : u && (t.other = (t.other ?? 0) + r);
52
51
  return t;
53
52
  }), p = l.map((e, t) => ({
54
53
  key: e,
55
- label: j(e),
54
+ label: O(e),
56
55
  color: o(t)
57
56
  }));
58
57
  return u && p.push({
@@ -64,8 +63,8 @@ function M(e, t, n, r = 8, i = 6) {
64
63
  series: p
65
64
  };
66
65
  }
67
- function N(e) {
68
- let t = A(e);
66
+ function A(e) {
67
+ let t = D(e);
69
68
  if (!t) return "";
70
69
  let n = Date.now() - t.getTime(), r = Math.round(n / 6e4);
71
70
  if (r < 1) return "just now";
@@ -77,71 +76,71 @@ function N(e) {
77
76
  let o = Math.round(a / 30);
78
77
  return o < 12 ? `${o}mo ago` : `${Math.round(o / 12)}y ago`;
79
78
  }
80
- var P = {
79
+ var j = {
81
80
  success: "bg-status-success-bg-subtle text-status-success-text",
82
81
  warning: "bg-status-warning-bg-subtle text-status-warning-text",
83
82
  error: "bg-status-error-bg-subtle text-status-error-text",
84
83
  info: "bg-status-info-bg-subtle text-status-info-text",
85
84
  neutral: "bg-bg-sunken text-text-secondary"
86
85
  };
87
- function F({ tone: e, children: t }) {
88
- return /* @__PURE__ */ C("span", {
89
- className: r("inline-flex items-center rounded-full px-2 py-0.5 text-[11px] font-medium capitalize whitespace-nowrap", P[e]),
86
+ function M({ tone: e, children: t }) {
87
+ return /* @__PURE__ */ b("span", {
88
+ className: r("inline-flex items-center rounded-full px-2 py-0.5 text-[11px] font-medium capitalize whitespace-nowrap", j[e]),
90
89
  children: t
91
90
  });
92
91
  }
93
- var I = (e) => e === "critical" ? "error" : e === "high" ? "warning" : e === "medium" ? "info" : "neutral", L = (e) => e === "completed" ? "success" : e === "in_progress" ? "info" : "warning";
94
- function R() {
95
- let { t: o } = oe(), P = t(), { hydrated: R, overview: z, assets: B, incidents: V, maintenanceRecords: H, changeRequests: se, workOrders: U, transactions: W } = e(), [G, ce] = p("status"), K = V.filter((e) => e.status !== "resolved" && e.status !== "closed"), le = V.filter((e) => e.priority === "critical" && e.status !== "resolved" && e.status !== "closed"), ue = H.filter((e) => e.status === "scheduled" || e.status === "in_progress"), q = U.filter((e) => e.status !== "completed" && e.status !== "cancelled"), de = se.filter((e) => e.status === "approved" || e.status === "submitted"), J = f(() => {
92
+ var N = (e) => e === "critical" ? "error" : e === "high" ? "warning" : e === "medium" ? "info" : "neutral", P = (e) => e === "completed" ? "success" : e === "in_progress" ? "info" : "warning";
93
+ function F() {
94
+ let o = n(), j = t(), { hydrated: F, overview: I, assets: L, incidents: R, maintenanceRecords: z, changeRequests: B, workOrders: V, transactions: H } = e(), [U, W] = p("status"), G = R.filter((e) => e.status !== "resolved" && e.status !== "closed"), le = R.filter((e) => e.priority === "critical" && e.status !== "resolved" && e.status !== "closed"), ue = z.filter((e) => e.status === "scheduled" || e.status === "in_progress"), K = V.filter((e) => e.status !== "completed" && e.status !== "cancelled"), de = B.filter((e) => e.status === "approved" || e.status === "submitted"), q = f(() => {
96
95
  let e = /* @__PURE__ */ new Map();
97
- for (let t of B) {
98
- let n = A(t.createdAt);
96
+ for (let t of L) {
97
+ let n = D(t.createdAt);
99
98
  if (!n) continue;
100
- let r = O(n);
99
+ let r = T(n);
101
100
  e.set(r, (e.get(r) ?? 0) + 1);
102
101
  }
103
102
  return [...e.keys()].sort().reduce((t, n) => {
104
103
  let r = t.length ? t[t.length - 1] : 0;
105
104
  return t.push(r + (e.get(n) ?? 0)), t;
106
105
  }, []);
107
- }, [B]), fe = [
106
+ }, [L]), J = [
108
107
  {
109
- label: n(o, "assethandler.dashboard.metrics.totalAssets", "Total Assets"),
110
- value: z?.totalAssets ?? B.length,
111
- icon: _,
112
- spark: J.length > 1 ? J : void 0,
108
+ label: o("assethandler.dashboard.metrics.totalAssets", "Total {{assets}}"),
109
+ value: I?.totalAssets ?? L.length,
110
+ icon: g,
111
+ spark: q.length > 1 ? q : void 0,
113
112
  hero: !0
114
113
  },
115
114
  {
116
- label: n(o, "assethandler.dashboard.metrics.openIncidents", "Open Incidents"),
117
- value: z?.openIncidents ?? K.length,
115
+ label: o("assethandler.dashboard.metrics.openIncidents", "Open Incidents"),
116
+ value: I?.openIncidents ?? G.length,
118
117
  icon: h
119
118
  },
120
119
  {
121
- label: n(o, "assethandler.dashboard.metrics.openWorkOrders", "Open Work Orders"),
122
- value: z?.openWorkOrders ?? q.length,
123
- icon: v
120
+ label: o("assethandler.dashboard.metrics.openWorkOrders", "Open Work Orders"),
121
+ value: I?.openWorkOrders ?? K.length,
122
+ icon: _
124
123
  },
125
124
  {
126
- label: n(o, "assethandler.dashboard.metrics.transactions", "Transactions"),
127
- value: z?.totalTransactions ?? W.length,
128
- icon: b
125
+ label: o("assethandler.dashboard.metrics.transactions", "Transactions"),
126
+ value: I?.totalTransactions ?? H.length,
127
+ icon: v
129
128
  }
130
129
  ], Y = f(() => {
131
- let e = B.reduce((e, t) => {
130
+ let e = L.reduce((e, t) => {
132
131
  let n = t.category || "uncategorized";
133
132
  return e[n] = (e[n] ?? 0) + 1, e;
134
133
  }, {});
135
134
  return Object.entries(e).sort((e, t) => t[1] - e[1]).map(([e, t]) => ({
136
- name: j(e),
135
+ name: O(e),
137
136
  value: t
138
137
  }));
139
- }, [B]), X = f(() => M(B, (e) => e.createdAt, (e) => G === "status" ? e.status : e.category, 8, 6), [B, G]), Z = f(() => {
138
+ }, [L]), X = f(() => k(L, (e) => e.createdAt, (e) => U === "status" ? e.status : e.category, 8, 6), [L, U]), Z = f(() => {
140
139
  let e = /* @__PURE__ */ new Map();
141
- for (let t of W) {
142
- let n = A(t.date);
140
+ for (let t of H) {
141
+ let n = D(t.date);
143
142
  if (!n) continue;
144
- let r = O(n);
143
+ let r = T(n);
145
144
  e.set(r, (e.get(r) ?? 0) + t.amount);
146
145
  }
147
146
  let t = [...e.keys()].sort(), n = t.reduce((t, n) => {
@@ -149,21 +148,21 @@ function R() {
149
148
  return t.push(r + (e.get(n) ?? 0)), t;
150
149
  }, []);
151
150
  return t.map((e, t) => ({
152
- month: k(e),
151
+ month: E(e),
153
152
  value: Math.round(n[t])
154
153
  }));
155
- }, [W]), pe = W[0]?.currency ?? "USD", Q = f(() => {
154
+ }, [H]), fe = H[0]?.currency ?? "USD", Q = f(() => {
156
155
  let e = [];
157
- for (let t of B) e.push({
156
+ for (let t of L) e.push({
158
157
  id: `asset-${t.id}`,
159
- icon: _,
158
+ icon: g,
160
159
  title: t.name,
161
- meta: "Asset registered",
160
+ meta: o("assethandler.dashboard.activity.assetRegistered", "{{asset}} registered"),
162
161
  at: t.createdAt,
163
162
  tone: t.status === "active" ? "success" : t.status === "maintenance" ? "warning" : "neutral",
164
163
  statusLabel: t.status.replace(/_/g, " ")
165
164
  });
166
- for (let t of V) e.push({
165
+ for (let t of R) e.push({
167
166
  id: `inc-${t.id}`,
168
167
  icon: h,
169
168
  title: t.title,
@@ -172,20 +171,20 @@ function R() {
172
171
  tone: t.status === "resolved" || t.status === "closed" ? "success" : t.priority === "critical" || t.priority === "high" ? "error" : "warning",
173
172
  statusLabel: t.status.replace(/_/g, " ")
174
173
  });
175
- for (let t of U) e.push({
174
+ for (let t of V) e.push({
176
175
  id: `wo-${t.id}`,
177
- icon: v,
176
+ icon: _,
178
177
  title: t.title,
179
178
  meta: `Work order · ${t.type}`,
180
179
  at: t.createdAt,
181
180
  tone: t.status === "completed" ? "success" : t.status === "in_progress" ? "info" : t.status === "cancelled" ? "neutral" : "warning",
182
181
  statusLabel: t.status.replace(/_/g, " ")
183
182
  });
184
- for (let t of H) {
183
+ for (let t of z) {
185
184
  let n = t.completedDate ?? t.scheduledDate;
186
185
  n && e.push({
187
186
  id: `mnt-${t.id}`,
188
- icon: x,
187
+ icon: y,
189
188
  title: t.title,
190
189
  meta: "Maintenance",
191
190
  at: n,
@@ -193,131 +192,132 @@ function R() {
193
192
  statusLabel: t.status.replace(/_/g, " ")
194
193
  });
195
194
  }
196
- return e.filter((e) => A(e.at)).sort((e, t) => t.at.localeCompare(e.at)).slice(0, 7);
195
+ return e.filter((e) => D(e.at)).sort((e, t) => t.at.localeCompare(e.at)).slice(0, 7);
197
196
  }, [
198
- B,
197
+ L,
198
+ R,
199
199
  V,
200
- U,
201
- H
202
- ]), $ = [...H].filter((e) => e.status !== "completed" && e.status !== "cancelled").sort((e, t) => (e.scheduledDate ?? "").localeCompare(t.scheduledDate ?? "")).slice(0, 8);
203
- return /* @__PURE__ */ w("div", {
200
+ z,
201
+ o
202
+ ]), $ = [...z].filter((e) => e.status !== "completed" && e.status !== "cancelled").sort((e, t) => (e.scheduledDate ?? "").localeCompare(t.scheduledDate ?? "")).slice(0, 8);
203
+ return /* @__PURE__ */ x("div", {
204
204
  className: "space-y-6 p-4 sm:p-6",
205
205
  children: [
206
- /* @__PURE__ */ w("div", {
206
+ /* @__PURE__ */ x("div", {
207
207
  className: "relative overflow-hidden rounded-xl border border-border-seam bg-gloss-card p-5 sm:p-6",
208
- children: [/* @__PURE__ */ C(T, { intensity: "subtle" }), /* @__PURE__ */ w("div", {
208
+ children: [/* @__PURE__ */ b(S, { intensity: "subtle" }), /* @__PURE__ */ x("div", {
209
209
  className: "relative flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",
210
- children: [/* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C("h1", {
210
+ children: [/* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("h1", {
211
211
  className: "text-2xl font-bold sm:text-3xl",
212
- children: /* @__PURE__ */ C(re, { children: n(o, "assethandler.dashboard.title", "Dashboard") })
213
- }), /* @__PURE__ */ C("p", {
212
+ children: /* @__PURE__ */ b(oe, { children: o("assethandler.dashboard.title", "Dashboard") })
213
+ }), /* @__PURE__ */ b("p", {
214
214
  className: "text-sm text-text-secondary mt-1",
215
- children: n(o, "assethandler.dashboard.description", "Overview of your IT asset portfolio and operations")
216
- })] }), /* @__PURE__ */ C(ne, {
215
+ children: o("assethandler.dashboard.description", "Overview of your IT asset portfolio and operations")
216
+ })] }), /* @__PURE__ */ b(ae, {
217
217
  primary: {
218
- label: n(o, "assethandler.dashboard.actions.addAsset", "Add Asset"),
219
- onSelect: () => P("/assets/asset-create")
218
+ label: o("assethandler.dashboard.actions.addAsset", "Add {{asset}}"),
219
+ onSelect: () => j("/assets/asset-create")
220
220
  },
221
221
  actions: [{
222
- label: n(o, "assethandler.dashboard.actions.viewAnalytics", "View Analytics"),
223
- onSelect: () => P("/analytics")
222
+ label: o("assethandler.dashboard.actions.viewAnalytics", "View Analytics"),
223
+ onSelect: () => j("/analytics")
224
224
  }]
225
225
  })]
226
226
  })]
227
227
  }),
228
- /* @__PURE__ */ C(ae, { children: n(o, "assethandler.dashboard.purpose", "Your command center for the whole asset estate — see what needs attention (open incidents, due maintenance, critical alerts) and recent activity at a glance, then jump straight to the area that needs you. Start here every day to know where to act.") }),
229
- /* @__PURE__ */ C("div", {
228
+ /* @__PURE__ */ b(ce, { children: o("assethandler.dashboard.purpose", "Your command center for the whole {{assetLower}} estate — see what needs attention (open incidents, due maintenance, critical alerts) and recent activity at a glance, then jump straight to the area that needs you. Start here every day to know where to act.") }),
229
+ /* @__PURE__ */ b("div", {
230
230
  className: "grid gap-4 md:grid-cols-2 lg:grid-cols-4",
231
- children: fe.map((e) => /* @__PURE__ */ C(u, {
231
+ children: J.map((e) => /* @__PURE__ */ b(u, {
232
232
  label: e.label,
233
- value: R ? e.value : "—",
233
+ value: F ? e.value : "—",
234
234
  format: i,
235
235
  icon: e.icon,
236
236
  spark: e.spark,
237
237
  hero: e.hero
238
238
  }, e.label))
239
239
  }),
240
- /* @__PURE__ */ w("div", {
240
+ /* @__PURE__ */ x("div", {
241
241
  className: "grid gap-6 lg:grid-cols-3",
242
- children: [/* @__PURE__ */ C(d, {
242
+ children: [/* @__PURE__ */ b(d, {
243
243
  className: "lg:col-span-2",
244
- title: n(o, "assethandler.dashboard.assetsChart.title", "Assets over time"),
245
- subtitle: n(o, "assethandler.dashboard.assetsChart.subtitle", "Assets added each month, from real registration dates"),
246
- icon: _,
247
- actions: /* @__PURE__ */ C("div", {
244
+ title: o("assethandler.dashboard.assetsChart.title", "{{assets}} over time"),
245
+ subtitle: o("assethandler.dashboard.assetsChart.subtitle", "{{assets}} added each month, from real registration dates"),
246
+ icon: g,
247
+ actions: /* @__PURE__ */ b("div", {
248
248
  className: "inline-flex rounded-lg bg-bg-sunken p-0.5",
249
- children: ["status", "category"].map((e) => /* @__PURE__ */ C("button", {
249
+ children: ["status", "category"].map((e) => /* @__PURE__ */ b("button", {
250
250
  type: "button",
251
- onClick: () => ce(e),
252
- className: r("rounded-md px-3 py-1 text-xs font-medium transition-colors", G === e ? "bg-bg-surface text-text-primary shadow-sm" : "text-text-secondary hover:text-text-primary"),
251
+ onClick: () => W(e),
252
+ className: r("rounded-md px-3 py-1 text-xs font-medium transition-colors", U === e ? "bg-bg-surface text-text-primary shadow-sm" : "text-text-secondary hover:text-text-primary"),
253
253
  children: e === "status" ? "By status" : "By category"
254
254
  }, e))
255
255
  }),
256
- children: X.rows.length === 0 ? /* @__PURE__ */ C(D, {
256
+ children: X.rows.length === 0 ? /* @__PURE__ */ b(w, {
257
257
  illustration: "empty-data",
258
- title: n(o, "assethandler.dashboard.assetsChart.empty.title", "No history yet"),
259
- description: n(o, "assethandler.dashboard.assetsChart.empty.description", "Register assets and their monthly trend will appear here.")
260
- }) : /* @__PURE__ */ C(c, {
258
+ title: o("assethandler.dashboard.assetsChart.empty.title", "No history yet"),
259
+ description: o("assethandler.dashboard.assetsChart.empty.description", "Register {{assetsLower}} and their monthly trend will appear here.")
260
+ }) : /* @__PURE__ */ b(c, {
261
261
  data: X.rows,
262
262
  xKey: "month",
263
263
  series: X.series,
264
264
  stacked: !0,
265
265
  height: 280,
266
- ariaLabel: "Assets added per month"
266
+ ariaLabel: o("assethandler.dashboard.assetsChart.aria", "{{assets}} added per month")
267
267
  })
268
- }), /* @__PURE__ */ C(E, {
268
+ }), /* @__PURE__ */ b(C, {
269
269
  treatment: "insight",
270
270
  className: "border-border-seam",
271
- children: /* @__PURE__ */ w("div", {
271
+ children: /* @__PURE__ */ x("div", {
272
272
  className: "flex flex-col gap-4 p-5",
273
- children: [/* @__PURE__ */ w("div", {
273
+ children: [/* @__PURE__ */ x("div", {
274
274
  className: "flex items-center justify-between",
275
- children: [/* @__PURE__ */ w("h3", {
275
+ children: [/* @__PURE__ */ x("h3", {
276
276
  className: "flex items-center gap-2 text-base font-semibold text-text-primary",
277
- children: [/* @__PURE__ */ C(m, { className: "h-4 w-4 text-text-secondary" }), n(o, "assethandler.dashboard.activity.title", "Recent activity")]
278
- }), /* @__PURE__ */ w("button", {
277
+ children: [/* @__PURE__ */ b(m, { className: "h-4 w-4 text-text-secondary" }), o("assethandler.dashboard.activity.title", "Recent activity")]
278
+ }), /* @__PURE__ */ x("button", {
279
279
  type: "button",
280
- onClick: () => P("/analytics"),
280
+ onClick: () => j("/analytics"),
281
281
  className: "inline-flex items-center gap-1 text-xs font-medium text-primary hover:underline",
282
- children: [n(o, "assethandler.dashboard.activity.viewAll", "View all"), /* @__PURE__ */ C(g, { className: "h-3 w-3" })]
282
+ children: [o("assethandler.dashboard.activity.viewAll", "View all"), /* @__PURE__ */ b(ee, { className: "h-3 w-3" })]
283
283
  })]
284
- }), Q.length === 0 ? /* @__PURE__ */ C("p", {
284
+ }), Q.length === 0 ? /* @__PURE__ */ b("p", {
285
285
  className: "py-6 text-center text-sm text-text-secondary",
286
- children: n(o, "assethandler.dashboard.activity.empty", "Activity across your estate will show up here.")
287
- }) : /* @__PURE__ */ C("ul", {
286
+ children: o("assethandler.dashboard.activity.empty", "Activity across your estate will show up here.")
287
+ }) : /* @__PURE__ */ b("ul", {
288
288
  className: "space-y-1",
289
289
  children: Q.map((e) => {
290
290
  let t = e.icon;
291
- return /* @__PURE__ */ w("li", {
291
+ return /* @__PURE__ */ x("li", {
292
292
  className: "flex items-start gap-3 rounded-lg px-2 py-2 hover:bg-bg-sunken/60",
293
- children: [/* @__PURE__ */ C("span", {
293
+ children: [/* @__PURE__ */ b("span", {
294
294
  className: "mt-0.5 flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-bg-sunken text-text-secondary",
295
- children: /* @__PURE__ */ C(t, { className: "h-4 w-4" })
296
- }), /* @__PURE__ */ w("div", {
295
+ children: /* @__PURE__ */ b(t, { className: "h-4 w-4" })
296
+ }), /* @__PURE__ */ x("div", {
297
297
  className: "min-w-0 flex-1",
298
- children: [/* @__PURE__ */ w("div", {
298
+ children: [/* @__PURE__ */ x("div", {
299
299
  className: "flex items-center justify-between gap-2",
300
- children: [/* @__PURE__ */ C("p", {
300
+ children: [/* @__PURE__ */ b("p", {
301
301
  className: "truncate text-sm font-medium text-text-primary",
302
302
  children: e.title
303
- }), /* @__PURE__ */ C(F, {
303
+ }), /* @__PURE__ */ b(M, {
304
304
  tone: e.tone,
305
305
  children: e.statusLabel
306
306
  })]
307
- }), /* @__PURE__ */ w("p", {
307
+ }), /* @__PURE__ */ x("p", {
308
308
  className: "mt-0.5 flex items-center gap-1.5 text-xs text-text-secondary capitalize",
309
309
  children: [
310
- /* @__PURE__ */ C("span", {
310
+ /* @__PURE__ */ b("span", {
311
311
  className: "truncate",
312
312
  children: e.meta
313
313
  }),
314
- /* @__PURE__ */ C("span", {
314
+ /* @__PURE__ */ b("span", {
315
315
  "aria-hidden": "true",
316
316
  children: "·"
317
317
  }),
318
- /* @__PURE__ */ C("span", {
318
+ /* @__PURE__ */ b("span", {
319
319
  className: "shrink-0 normal-case text-text-muted",
320
- children: N(e.at)
320
+ children: A(e.at)
321
321
  })
322
322
  ]
323
323
  })]
@@ -328,86 +328,86 @@ function R() {
328
328
  })
329
329
  })]
330
330
  }),
331
- /* @__PURE__ */ C(d, {
332
- title: n(o, "assethandler.dashboard.value.title", "Transaction value"),
333
- subtitle: n(o, "assethandler.dashboard.value.subtitle", "Cumulative transaction amount over time"),
334
- icon: b,
335
- children: Z.length === 0 ? /* @__PURE__ */ C(D, {
331
+ /* @__PURE__ */ b(d, {
332
+ title: o("assethandler.dashboard.value.title", "Transaction value"),
333
+ subtitle: o("assethandler.dashboard.value.subtitle", "Cumulative transaction amount over time"),
334
+ icon: v,
335
+ children: Z.length === 0 ? /* @__PURE__ */ b(w, {
336
336
  illustration: "empty-data",
337
- title: n(o, "assethandler.dashboard.value.empty.title", "No transactions yet"),
338
- description: n(o, "assethandler.dashboard.value.empty.description", "Asset purchases, leases and disposals will chart here as they are recorded.")
339
- }) : /* @__PURE__ */ C(s, {
337
+ title: o("assethandler.dashboard.value.empty.title", "No transactions yet"),
338
+ description: o("assethandler.dashboard.value.empty.description", "{{asset}} purchases, leases and disposals will chart here as they are recorded.")
339
+ }) : /* @__PURE__ */ b(s, {
340
340
  data: Z,
341
341
  xKey: "month",
342
342
  series: [{
343
343
  key: "value",
344
344
  label: "Cumulative value"
345
345
  }],
346
- valueFormat: a(pe),
346
+ valueFormat: a(fe),
347
347
  height: 260,
348
348
  ariaLabel: "Cumulative transaction value over time"
349
349
  })
350
350
  }),
351
- /* @__PURE__ */ w("div", {
351
+ /* @__PURE__ */ x("div", {
352
352
  className: "grid gap-6 lg:grid-cols-3",
353
- children: [/* @__PURE__ */ C(d, {
353
+ children: [/* @__PURE__ */ b(d, {
354
354
  className: "lg:col-span-2",
355
- title: n(o, "assethandler.dashboard.portfolio.title", "Portfolio by category"),
356
- subtitle: n(o, "assethandler.dashboard.portfolio.description", "Asset distribution by category"),
357
- icon: _,
358
- children: Y.length === 0 ? /* @__PURE__ */ C(D, {
355
+ title: o("assethandler.dashboard.portfolio.title", "Portfolio by category"),
356
+ subtitle: o("assethandler.dashboard.portfolio.description", "{{asset}} distribution by category"),
357
+ icon: g,
358
+ children: Y.length === 0 ? /* @__PURE__ */ b(w, {
359
359
  illustration: "empty-data",
360
- title: n(o, "assethandler.dashboard.portfolio.empty.title", "No assets yet"),
361
- description: n(o, "assethandler.dashboard.portfolio.empty.description", "Register your first asset and category distribution will appear here.")
362
- }) : /* @__PURE__ */ C(l, {
360
+ title: o("assethandler.dashboard.portfolio.empty.title", "No {{assetsLower}} yet"),
361
+ description: o("assethandler.dashboard.portfolio.empty.description", "Register your first {{assetLower}} and category distribution will appear here.")
362
+ }) : /* @__PURE__ */ b(l, {
363
363
  data: Y,
364
- centerLabel: "Assets",
365
- centerValue: B.length,
364
+ centerLabel: o("assethandler.dashboard.portfolio.centerLabel", "{{assets}}"),
365
+ centerValue: L.length,
366
366
  height: 260,
367
- ariaLabel: "Assets by category"
367
+ ariaLabel: o("assethandler.dashboard.portfolio.aria", "{{assets}} by category")
368
368
  })
369
- }), /* @__PURE__ */ C(E, {
369
+ }), /* @__PURE__ */ b(C, {
370
370
  treatment: "glass",
371
371
  className: "border-border-seam",
372
- children: /* @__PURE__ */ w("div", {
372
+ children: /* @__PURE__ */ x("div", {
373
373
  className: "flex flex-col gap-4 p-5",
374
- children: [/* @__PURE__ */ C("h3", {
374
+ children: [/* @__PURE__ */ b("h3", {
375
375
  className: "text-base font-semibold text-text-primary",
376
- children: n(o, "assethandler.dashboard.operations.title", "Operations summary")
377
- }), /* @__PURE__ */ C("div", {
376
+ children: o("assethandler.dashboard.operations.title", "Operations summary")
377
+ }), /* @__PURE__ */ b("div", {
378
378
  className: "grid grid-cols-2 gap-3",
379
379
  children: [
380
380
  {
381
- icon: x,
381
+ icon: y,
382
382
  value: ue.length,
383
- label: "Pending Maintenance"
383
+ label: o("assethandler.dashboard.operations.pendingMaintenance", "Pending Maintenance")
384
384
  },
385
385
  {
386
386
  icon: m,
387
- value: q.length,
388
- label: "Open Work Orders"
387
+ value: K.length,
388
+ label: o("assethandler.dashboard.operations.openWorkOrders", "Open Work Orders")
389
389
  },
390
390
  {
391
- icon: y,
391
+ icon: re,
392
392
  value: de.length,
393
- label: "Pending Changes"
393
+ label: o("assethandler.dashboard.operations.pendingChanges", "Pending Changes")
394
394
  },
395
395
  {
396
- icon: te,
396
+ icon: ne,
397
397
  value: le.length,
398
- label: "Critical Alerts"
398
+ label: o("assethandler.dashboard.operations.criticalAlerts", "Critical Alerts")
399
399
  }
400
400
  ].map((e) => {
401
401
  let t = e.icon;
402
- return /* @__PURE__ */ w("div", {
402
+ return /* @__PURE__ */ x("div", {
403
403
  className: "rounded-lg border border-border-seam bg-gloss-card p-4 text-center",
404
404
  children: [
405
- /* @__PURE__ */ C(t, { className: "mx-auto mb-2 h-5 w-5 text-text-secondary" }),
406
- /* @__PURE__ */ C("p", {
405
+ /* @__PURE__ */ b(t, { className: "mx-auto mb-2 h-5 w-5 text-text-secondary" }),
406
+ /* @__PURE__ */ b("p", {
407
407
  className: "text-2xl font-bold tabular-nums",
408
408
  children: e.value
409
409
  }),
410
- /* @__PURE__ */ C("p", {
410
+ /* @__PURE__ */ b("p", {
411
411
  className: "text-xs text-text-secondary",
412
412
  children: e.label
413
413
  })
@@ -418,75 +418,75 @@ function R() {
418
418
  })
419
419
  })]
420
420
  }),
421
- /* @__PURE__ */ w("div", {
421
+ /* @__PURE__ */ x("div", {
422
422
  className: "grid gap-6 lg:grid-cols-2",
423
- children: [/* @__PURE__ */ C(E, {
423
+ children: [/* @__PURE__ */ b(C, {
424
424
  treatment: "glass",
425
425
  className: "border-border-seam",
426
- children: /* @__PURE__ */ w("div", {
426
+ children: /* @__PURE__ */ x("div", {
427
427
  className: "flex flex-col gap-4 p-5",
428
- children: [/* @__PURE__ */ w("div", { children: [/* @__PURE__ */ w("h3", {
428
+ children: [/* @__PURE__ */ x("div", { children: [/* @__PURE__ */ x("h3", {
429
429
  className: "flex items-center gap-2 text-base font-semibold text-text-primary",
430
- children: [/* @__PURE__ */ C(h, { className: "h-4 w-4 text-status-error-text" }), n(o, "assethandler.dashboard.incidents.title", "Active Incidents")]
431
- }), /* @__PURE__ */ w("p", {
430
+ children: [/* @__PURE__ */ b(h, { className: "h-4 w-4 text-status-error-text" }), o("assethandler.dashboard.incidents.title", "Active Incidents")]
431
+ }), /* @__PURE__ */ x("p", {
432
432
  className: "mt-0.5 text-sm text-text-secondary",
433
433
  children: [
434
- K.length,
434
+ G.length,
435
435
  " ",
436
- n(o, "assethandler.dashboard.incidents.unresolvedCount", "unresolved incidents")
436
+ o("assethandler.dashboard.incidents.unresolvedCount", "unresolved incidents")
437
437
  ]
438
- })] }), K.length === 0 ? /* @__PURE__ */ C("p", {
438
+ })] }), G.length === 0 ? /* @__PURE__ */ b("p", {
439
439
  className: "py-4 text-center text-sm text-text-secondary",
440
- children: n(o, "assethandler.dashboard.incidents.empty", "No unresolved incidents — all clear.")
441
- }) : /* @__PURE__ */ C("div", {
440
+ children: o("assethandler.dashboard.incidents.empty", "No unresolved incidents — all clear.")
441
+ }) : /* @__PURE__ */ b("div", {
442
442
  className: "space-y-2",
443
- children: K.slice(0, 5).map((e) => /* @__PURE__ */ w("button", {
443
+ children: G.slice(0, 5).map((e) => /* @__PURE__ */ x("button", {
444
444
  type: "button",
445
- onClick: () => P("/itil/incident-management"),
445
+ onClick: () => j("/itil/incident-management"),
446
446
  className: "flex w-full items-start gap-3 rounded-lg border border-border-seam p-3 text-left hover:bg-bg-sunken/60",
447
- children: [/* @__PURE__ */ C(F, {
448
- tone: I(e.priority),
447
+ children: [/* @__PURE__ */ b(M, {
448
+ tone: N(e.priority),
449
449
  children: e.priority
450
- }), /* @__PURE__ */ w("div", {
450
+ }), /* @__PURE__ */ x("div", {
451
451
  className: "min-w-0 flex-1",
452
- children: [/* @__PURE__ */ C("p", {
452
+ children: [/* @__PURE__ */ b("p", {
453
453
  className: "truncate text-sm font-medium",
454
454
  children: e.title
455
- }), /* @__PURE__ */ C("p", {
455
+ }), /* @__PURE__ */ b("p", {
456
456
  className: "mt-0.5 text-xs text-text-secondary",
457
- children: e.assignedTo || n(o, "assethandler.dashboard.incidents.unassigned", "Unassigned")
457
+ children: e.assignedTo || o("assethandler.dashboard.incidents.unassigned", "Unassigned")
458
458
  })]
459
459
  })]
460
460
  }, e.id))
461
461
  })]
462
462
  })
463
- }), /* @__PURE__ */ C(E, {
463
+ }), /* @__PURE__ */ b(C, {
464
464
  treatment: "glass",
465
465
  className: "border-border-seam",
466
- children: /* @__PURE__ */ w("div", {
466
+ children: /* @__PURE__ */ x("div", {
467
467
  className: "flex flex-col gap-4 p-5",
468
- children: [/* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C("h3", {
468
+ children: [/* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("h3", {
469
469
  className: "text-base font-semibold text-text-primary",
470
- children: n(o, "assethandler.dashboard.workOrders.title", "Open Work Orders")
471
- }), /* @__PURE__ */ C("p", {
470
+ children: o("assethandler.dashboard.workOrders.title", "Open Work Orders")
471
+ }), /* @__PURE__ */ b("p", {
472
472
  className: "mt-0.5 text-sm text-text-secondary",
473
- children: n(o, "assethandler.dashboard.workOrders.description", "Latest work in progress")
474
- })] }), q.length === 0 ? /* @__PURE__ */ C("p", {
473
+ children: o("assethandler.dashboard.workOrders.description", "Latest work in progress")
474
+ })] }), K.length === 0 ? /* @__PURE__ */ b("p", {
475
475
  className: "py-4 text-center text-sm text-text-secondary",
476
- children: n(o, "assethandler.dashboard.workOrders.empty", "No open work orders. Create one from the Operations hub.")
477
- }) : /* @__PURE__ */ C("div", {
476
+ children: o("assethandler.dashboard.workOrders.empty", "No open work orders. Create one from the Operations hub.")
477
+ }) : /* @__PURE__ */ b("div", {
478
478
  className: "space-y-2",
479
- children: [...q].sort((e, t) => t.createdAt.localeCompare(e.createdAt)).slice(0, 5).map((e) => /* @__PURE__ */ w("div", {
479
+ children: [...K].sort((e, t) => t.createdAt.localeCompare(e.createdAt)).slice(0, 5).map((e) => /* @__PURE__ */ x("div", {
480
480
  className: "flex items-center gap-3 rounded-lg border border-border-seam p-3",
481
- children: [/* @__PURE__ */ C(F, {
481
+ children: [/* @__PURE__ */ b(M, {
482
482
  tone: e.status === "in_progress" ? "info" : "warning",
483
483
  children: e.status.replace(/_/g, " ")
484
- }), /* @__PURE__ */ w("div", {
484
+ }), /* @__PURE__ */ x("div", {
485
485
  className: "min-w-0 flex-1",
486
- children: [/* @__PURE__ */ C("p", {
486
+ children: [/* @__PURE__ */ b("p", {
487
487
  className: "truncate text-sm",
488
488
  children: e.title
489
- }), /* @__PURE__ */ w("p", {
489
+ }), /* @__PURE__ */ x("p", {
490
490
  className: "text-xs text-text-secondary capitalize",
491
491
  children: [
492
492
  e.type,
@@ -500,103 +500,103 @@ function R() {
500
500
  })
501
501
  })]
502
502
  }),
503
- /* @__PURE__ */ C(E, {
503
+ /* @__PURE__ */ b(C, {
504
504
  treatment: "glass",
505
505
  className: "border-border-seam",
506
- children: /* @__PURE__ */ w("div", {
506
+ children: /* @__PURE__ */ x("div", {
507
507
  className: "flex flex-col gap-4 p-5",
508
- children: [/* @__PURE__ */ w("div", { children: [/* @__PURE__ */ w("h3", {
508
+ children: [/* @__PURE__ */ x("div", { children: [/* @__PURE__ */ x("h3", {
509
509
  className: "flex items-center gap-2 text-base font-semibold text-text-primary",
510
- children: [/* @__PURE__ */ C(ee, { className: "h-4 w-4 text-text-secondary" }), n(o, "assethandler.dashboard.maintenance.title", "Upcoming Maintenance")]
511
- }), /* @__PURE__ */ C("p", {
510
+ children: [/* @__PURE__ */ b(te, { className: "h-4 w-4 text-text-secondary" }), o("assethandler.dashboard.maintenance.title", "Upcoming Maintenance")]
511
+ }), /* @__PURE__ */ b("p", {
512
512
  className: "mt-0.5 text-sm text-text-secondary",
513
- children: n(o, "assethandler.dashboard.maintenance.description", "Scheduled maintenance activities")
514
- })] }), $.length === 0 ? /* @__PURE__ */ C(D, {
513
+ children: o("assethandler.dashboard.maintenance.description", "Scheduled maintenance activities")
514
+ })] }), $.length === 0 ? /* @__PURE__ */ b(w, {
515
515
  illustration: "empty-tasks",
516
- title: n(o, "assethandler.dashboard.maintenance.empty.title", "No maintenance scheduled"),
517
- description: n(o, "assethandler.dashboard.maintenance.empty.description", "Plan preventive maintenance from the scheduler and it will show up here.")
518
- }) : /* @__PURE__ */ w(S, { children: [/* @__PURE__ */ C("div", {
516
+ title: o("assethandler.dashboard.maintenance.empty.title", "No maintenance scheduled"),
517
+ description: o("assethandler.dashboard.maintenance.empty.description", "Plan preventive maintenance from the scheduler and it will show up here.")
518
+ }) : /* @__PURE__ */ x(ie, { children: [/* @__PURE__ */ b("div", {
519
519
  className: "space-y-2 md:hidden",
520
- children: $.map((e) => /* @__PURE__ */ w("div", {
520
+ children: $.map((e) => /* @__PURE__ */ x("div", {
521
521
  className: "rounded-lg border border-border-seam p-3",
522
- children: [/* @__PURE__ */ w("div", {
522
+ children: [/* @__PURE__ */ x("div", {
523
523
  className: "flex items-start justify-between gap-2",
524
- children: [/* @__PURE__ */ C("p", {
524
+ children: [/* @__PURE__ */ b("p", {
525
525
  className: "min-w-0 flex-1 truncate text-sm font-medium",
526
526
  children: e.title
527
- }), /* @__PURE__ */ C(F, {
528
- tone: L(e.status),
527
+ }), /* @__PURE__ */ b(M, {
528
+ tone: P(e.status),
529
529
  children: e.status.replace(/_/g, " ")
530
530
  })]
531
- }), /* @__PURE__ */ w("div", {
531
+ }), /* @__PURE__ */ x("div", {
532
532
  className: "mt-2 flex flex-wrap items-center gap-2 text-xs text-text-secondary",
533
533
  children: [
534
- /* @__PURE__ */ C("span", {
534
+ /* @__PURE__ */ b("span", {
535
535
  className: "capitalize",
536
536
  children: e.type
537
537
  }),
538
- /* @__PURE__ */ C(F, {
539
- tone: I(e.priority),
538
+ /* @__PURE__ */ b(M, {
539
+ tone: N(e.priority),
540
540
  children: e.priority
541
541
  }),
542
- /* @__PURE__ */ C("span", { children: e.scheduledDate ? new Date(e.scheduledDate).toLocaleDateString() : "—" })
542
+ /* @__PURE__ */ b("span", { children: e.scheduledDate ? new Date(e.scheduledDate).toLocaleDateString() : "—" })
543
543
  ]
544
544
  })]
545
545
  }, e.id))
546
- }), /* @__PURE__ */ C("div", {
546
+ }), /* @__PURE__ */ b("div", {
547
547
  className: "hidden overflow-x-auto md:block",
548
- children: /* @__PURE__ */ w("table", {
548
+ children: /* @__PURE__ */ x("table", {
549
549
  className: "w-full text-sm",
550
- children: [/* @__PURE__ */ C("thead", { children: /* @__PURE__ */ w("tr", {
550
+ children: [/* @__PURE__ */ b("thead", { children: /* @__PURE__ */ x("tr", {
551
551
  className: "border-b border-border-seam text-text-secondary",
552
552
  children: [
553
- /* @__PURE__ */ C("th", {
553
+ /* @__PURE__ */ b("th", {
554
554
  className: "py-2 text-left font-medium",
555
555
  children: "Title"
556
556
  }),
557
- /* @__PURE__ */ C("th", {
557
+ /* @__PURE__ */ b("th", {
558
558
  className: "py-2 text-left font-medium",
559
559
  children: "Type"
560
560
  }),
561
- /* @__PURE__ */ C("th", {
561
+ /* @__PURE__ */ b("th", {
562
562
  className: "py-2 text-left font-medium",
563
563
  children: "Priority"
564
564
  }),
565
- /* @__PURE__ */ C("th", {
565
+ /* @__PURE__ */ b("th", {
566
566
  className: "py-2 text-left font-medium",
567
567
  children: "Scheduled"
568
568
  }),
569
- /* @__PURE__ */ C("th", {
569
+ /* @__PURE__ */ b("th", {
570
570
  className: "py-2 text-left font-medium",
571
571
  children: "Status"
572
572
  })
573
573
  ]
574
- }) }), /* @__PURE__ */ C("tbody", { children: $.map((e) => /* @__PURE__ */ w("tr", {
574
+ }) }), /* @__PURE__ */ b("tbody", { children: $.map((e) => /* @__PURE__ */ x("tr", {
575
575
  className: "border-b border-border-seam hover:bg-bg-sunken/50",
576
576
  children: [
577
- /* @__PURE__ */ C("td", {
577
+ /* @__PURE__ */ b("td", {
578
578
  className: "py-2.5 font-medium",
579
579
  children: e.title
580
580
  }),
581
- /* @__PURE__ */ C("td", {
581
+ /* @__PURE__ */ b("td", {
582
582
  className: "py-2.5 capitalize",
583
583
  children: e.type
584
584
  }),
585
- /* @__PURE__ */ C("td", {
585
+ /* @__PURE__ */ b("td", {
586
586
  className: "py-2.5",
587
- children: /* @__PURE__ */ C(F, {
588
- tone: I(e.priority),
587
+ children: /* @__PURE__ */ b(M, {
588
+ tone: N(e.priority),
589
589
  children: e.priority
590
590
  })
591
591
  }),
592
- /* @__PURE__ */ C("td", {
592
+ /* @__PURE__ */ b("td", {
593
593
  className: "py-2.5",
594
594
  children: e.scheduledDate ? new Date(e.scheduledDate).toLocaleDateString() : "—"
595
595
  }),
596
- /* @__PURE__ */ C("td", {
596
+ /* @__PURE__ */ b("td", {
597
597
  className: "py-2.5",
598
- children: /* @__PURE__ */ C(F, {
599
- tone: L(e.status),
598
+ children: /* @__PURE__ */ b(M, {
599
+ tone: P(e.status),
600
600
  children: e.status.replace(/_/g, " ")
601
601
  })
602
602
  })
@@ -606,32 +606,32 @@ function R() {
606
606
  })] })]
607
607
  })
608
608
  }),
609
- /* @__PURE__ */ C(ie, {
609
+ /* @__PURE__ */ b(se, {
610
610
  storageKey: "assethandler-dashboard",
611
611
  steps: [
612
612
  {
613
613
  id: "view-assets",
614
- label: "Browse your asset inventory",
615
- description: "See every tracked asset, its status and owner.",
616
- onClick: () => P("/assets/asset-list")
614
+ label: o("assethandler.dashboard.nextSteps.viewAssets.label", "Browse your {{assetLower}} inventory"),
615
+ description: o("assethandler.dashboard.nextSteps.viewAssets.description", "See every tracked {{assetLower}}, its status and owner."),
616
+ onClick: () => j("/assets/asset-list")
617
617
  },
618
618
  {
619
619
  id: "add-asset",
620
- label: "Register a new asset",
621
- description: "Add equipment, hardware or software to start tracking it.",
622
- onClick: () => P("/assets/asset-create")
620
+ label: o("assethandler.dashboard.nextSteps.addAsset.label", "Register a new {{assetLower}}"),
621
+ description: o("assethandler.dashboard.nextSteps.addAsset.description", "Add equipment, hardware or software to start tracking it."),
622
+ onClick: () => j("/assets/asset-create")
623
623
  },
624
624
  {
625
625
  id: "incidents",
626
- label: "Resolve open incidents",
627
- description: "Triage service-affecting issues before they breach SLA.",
628
- onClick: () => P("/itil/incident-management")
626
+ label: o("assethandler.dashboard.nextSteps.incidents.label", "Resolve open incidents"),
627
+ description: o("assethandler.dashboard.nextSteps.incidents.description", "Triage service-affecting issues before they breach SLA."),
628
+ onClick: () => j("/itil/incident-management")
629
629
  },
630
630
  {
631
631
  id: "maintenance",
632
- label: "Check the maintenance calendar",
633
- description: "Stay ahead of scheduled and overdue maintenance.",
634
- onClick: () => P("/maintenance/maintenance-calendar")
632
+ label: o("assethandler.dashboard.nextSteps.maintenance.label", "Check the maintenance calendar"),
633
+ description: o("assethandler.dashboard.nextSteps.maintenance.description", "Stay ahead of scheduled and overdue maintenance."),
634
+ onClick: () => j("/maintenance/maintenance-calendar")
635
635
  }
636
636
  ]
637
637
  })
@@ -639,6 +639,6 @@ function R() {
639
639
  });
640
640
  }
641
641
  //#endregion
642
- export { R as DashboardPage };
642
+ export { F as DashboardPage };
643
643
 
644
644
  //# sourceMappingURL=DashboardPage.js.map