@burdenoff/microfe-proserviceworld 2026.1026.2 → 2026.1031.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 (105) hide show
  1. package/dist/proserviceworld/components/CredentialDirectory.js +44 -43
  2. package/dist/proserviceworld/components/CredentialDirectory.js.map +1 -1
  3. package/dist/proserviceworld/components/CredentialReminderPanel.js +5 -4
  4. package/dist/proserviceworld/components/CredentialReminderPanel.js.map +1 -1
  5. package/dist/proserviceworld/components/ui.d.ts +7 -3
  6. package/dist/proserviceworld/components/ui.d.ts.map +1 -1
  7. package/dist/proserviceworld/components/ui.js +135 -121
  8. package/dist/proserviceworld/components/ui.js.map +1 -1
  9. package/dist/proserviceworld/hooks/useProServiceWorldApi.d.ts +28 -0
  10. package/dist/proserviceworld/hooks/useProServiceWorldApi.d.ts.map +1 -1
  11. package/dist/proserviceworld/hooks/useProServiceWorldApi.js +95 -73
  12. package/dist/proserviceworld/hooks/useProServiceWorldApi.js.map +1 -1
  13. package/dist/proserviceworld/hooks/useTr.d.ts +49 -8
  14. package/dist/proserviceworld/hooks/useTr.d.ts.map +1 -1
  15. package/dist/proserviceworld/hooks/useTr.js +45 -21
  16. package/dist/proserviceworld/hooks/useTr.js.map +1 -1
  17. package/dist/proserviceworld/i18n/catalog/analytics.d.ts +5 -0
  18. package/dist/proserviceworld/i18n/catalog/analytics.d.ts.map +1 -0
  19. package/dist/proserviceworld/i18n/catalog/analytics.js +271 -0
  20. package/dist/proserviceworld/i18n/catalog/analytics.js.map +1 -0
  21. package/dist/proserviceworld/i18n/catalog/common.d.ts +9 -0
  22. package/dist/proserviceworld/i18n/catalog/common.d.ts.map +1 -0
  23. package/dist/proserviceworld/i18n/catalog/common.js +163 -0
  24. package/dist/proserviceworld/i18n/catalog/common.js.map +1 -0
  25. package/dist/proserviceworld/i18n/catalog/compliance.d.ts +5 -0
  26. package/dist/proserviceworld/i18n/catalog/compliance.d.ts.map +1 -0
  27. package/dist/proserviceworld/i18n/catalog/compliance.js +157 -0
  28. package/dist/proserviceworld/i18n/catalog/compliance.js.map +1 -0
  29. package/dist/proserviceworld/i18n/catalog/conflicts.d.ts +5 -0
  30. package/dist/proserviceworld/i18n/catalog/conflicts.d.ts.map +1 -0
  31. package/dist/proserviceworld/i18n/catalog/conflicts.js +145 -0
  32. package/dist/proserviceworld/i18n/catalog/conflicts.js.map +1 -0
  33. package/dist/proserviceworld/i18n/catalog/documents.d.ts +5 -0
  34. package/dist/proserviceworld/i18n/catalog/documents.d.ts.map +1 -0
  35. package/dist/proserviceworld/i18n/catalog/documents.js +157 -0
  36. package/dist/proserviceworld/i18n/catalog/documents.js.map +1 -0
  37. package/dist/proserviceworld/i18n/catalog/enums.d.ts +10 -0
  38. package/dist/proserviceworld/i18n/catalog/enums.d.ts.map +1 -0
  39. package/dist/proserviceworld/i18n/catalog/enums.js +481 -0
  40. package/dist/proserviceworld/i18n/catalog/enums.js.map +1 -0
  41. package/dist/proserviceworld/i18n/catalog/index.d.ts +9 -0
  42. package/dist/proserviceworld/i18n/catalog/index.d.ts.map +1 -0
  43. package/dist/proserviceworld/i18n/catalog/index.js +25 -0
  44. package/dist/proserviceworld/i18n/catalog/index.js.map +1 -0
  45. package/dist/proserviceworld/i18n/catalog/invoices.d.ts +5 -0
  46. package/dist/proserviceworld/i18n/catalog/invoices.d.ts.map +1 -0
  47. package/dist/proserviceworld/i18n/catalog/invoices.js +247 -0
  48. package/dist/proserviceworld/i18n/catalog/invoices.js.map +1 -0
  49. package/dist/proserviceworld/i18n/catalog/practiceAreas.d.ts +5 -0
  50. package/dist/proserviceworld/i18n/catalog/practiceAreas.d.ts.map +1 -0
  51. package/dist/proserviceworld/i18n/catalog/practiceAreas.js +97 -0
  52. package/dist/proserviceworld/i18n/catalog/practiceAreas.js.map +1 -0
  53. package/dist/proserviceworld/i18n/catalog/time.d.ts +5 -0
  54. package/dist/proserviceworld/i18n/catalog/time.d.ts.map +1 -0
  55. package/dist/proserviceworld/i18n/catalog/time.js +301 -0
  56. package/dist/proserviceworld/i18n/catalog/time.js.map +1 -0
  57. package/dist/proserviceworld/i18n/index.d.ts +10 -9
  58. package/dist/proserviceworld/i18n/index.d.ts.map +1 -1
  59. package/dist/proserviceworld/i18n/index.js +16 -12
  60. package/dist/proserviceworld/i18n/index.js.map +1 -1
  61. package/dist/proserviceworld/i18n/types.d.ts +13 -0
  62. package/dist/proserviceworld/i18n/types.d.ts.map +1 -0
  63. package/dist/proserviceworld/i18n/types.js +18 -0
  64. package/dist/proserviceworld/i18n/types.js.map +1 -0
  65. package/dist/proserviceworld/pages/AnalyticsPage.d.ts.map +1 -1
  66. package/dist/proserviceworld/pages/AnalyticsPage.js +236 -152
  67. package/dist/proserviceworld/pages/AnalyticsPage.js.map +1 -1
  68. package/dist/proserviceworld/pages/ClientDetailPage.js +99 -98
  69. package/dist/proserviceworld/pages/ClientDetailPage.js.map +1 -1
  70. package/dist/proserviceworld/pages/ClientsPage.d.ts.map +1 -1
  71. package/dist/proserviceworld/pages/ClientsPage.js +181 -181
  72. package/dist/proserviceworld/pages/ClientsPage.js.map +1 -1
  73. package/dist/proserviceworld/pages/CompliancePage.d.ts.map +1 -1
  74. package/dist/proserviceworld/pages/CompliancePage.js +210 -209
  75. package/dist/proserviceworld/pages/CompliancePage.js.map +1 -1
  76. package/dist/proserviceworld/pages/ConflictsPage.d.ts.map +1 -1
  77. package/dist/proserviceworld/pages/ConflictsPage.js +139 -138
  78. package/dist/proserviceworld/pages/ConflictsPage.js.map +1 -1
  79. package/dist/proserviceworld/pages/DocumentsPage.d.ts.map +1 -1
  80. package/dist/proserviceworld/pages/DocumentsPage.js +150 -149
  81. package/dist/proserviceworld/pages/DocumentsPage.js.map +1 -1
  82. package/dist/proserviceworld/pages/EngagementDetailPage.js +105 -104
  83. package/dist/proserviceworld/pages/EngagementDetailPage.js.map +1 -1
  84. package/dist/proserviceworld/pages/EngagementsPage.d.ts.map +1 -1
  85. package/dist/proserviceworld/pages/EngagementsPage.js +137 -137
  86. package/dist/proserviceworld/pages/EngagementsPage.js.map +1 -1
  87. package/dist/proserviceworld/pages/InvoicesPage.d.ts.map +1 -1
  88. package/dist/proserviceworld/pages/InvoicesPage.js +275 -258
  89. package/dist/proserviceworld/pages/InvoicesPage.js.map +1 -1
  90. package/dist/proserviceworld/pages/MattersPage.d.ts.map +1 -1
  91. package/dist/proserviceworld/pages/MattersPage.js +166 -166
  92. package/dist/proserviceworld/pages/MattersPage.js.map +1 -1
  93. package/dist/proserviceworld/pages/PracticeAreasPage.d.ts.map +1 -1
  94. package/dist/proserviceworld/pages/PracticeAreasPage.js +100 -99
  95. package/dist/proserviceworld/pages/PracticeAreasPage.js.map +1 -1
  96. package/dist/proserviceworld/pages/PractitionerCredentialsPage.js +30 -29
  97. package/dist/proserviceworld/pages/PractitionerCredentialsPage.js.map +1 -1
  98. package/dist/proserviceworld/pages/TimePage.d.ts.map +1 -1
  99. package/dist/proserviceworld/pages/TimePage.js +343 -350
  100. package/dist/proserviceworld/pages/TimePage.js.map +1 -1
  101. package/dist/proserviceworld/utils/humanize.d.ts +3 -0
  102. package/dist/proserviceworld/utils/humanize.d.ts.map +1 -0
  103. package/dist/proserviceworld/utils/humanize.js +6 -0
  104. package/dist/proserviceworld/utils/humanize.js.map +1 -0
  105. package/package.json +1 -1
@@ -1,175 +1,192 @@
1
- import { useCancelInvoice as e, useClients as t, useCreateInvoice as n, useEngagements as r, useInvoice as i, useInvoices as a, useMarkInvoicePaid as o } from "../hooks/useProServiceWorldApi.js";
2
- import { cn as s } from "../utils/cn.js";
3
- import { Banner as c, Empty as l, ErrorState as u, Field as d, LoadingBlock as f, MetricCard as p, Modal as m, NativeSelect as h, PageHeader as g, SectionCard as _, StatusPill as v, TableWrap as y, Td as b, TextArea as x, TextInput as S, Th as C, enumOptions as w, fmtDate as T, fmtMoney as E } from "../components/ui.js";
4
- import { useAnalytics as D } from "../hooks/useAnalytics.js";
5
- import { useDeferredValue as O, useMemo as k, useState as A } from "react";
6
- import { AlertCircle as ee, CheckCircle2 as te, Eye as ne, Plus as j, Receipt as M, Search as N, Wallet as P, XCircle as F } from "lucide-react";
7
- import { Fragment as I, jsx as L, jsxs as R } from "react/jsx-runtime";
8
- import { Button as z } from "@burdenoff/fe-libs/ui";
1
+ import { useCancelInvoice as e, useClients as t, useCreateInvoice as n, useEngagements as r, useInvoice as i, useInvoices as a, useMarkInvoicePaid as o, useSendInvoice as s } from "../hooks/useProServiceWorldApi.js";
2
+ import { cn as c } from "../utils/cn.js";
3
+ import { plural as l, useEnumLabel as u, useTr as d } from "../hooks/useTr.js";
4
+ import { Banner as f, Empty as p, ErrorState as m, Field as h, LoadingBlock as g, MetricCard as _, Modal as v, NativeSelect as y, PageHeader as b, SectionCard as ee, StatusPill as x, TableWrap as S, Td as C, TextArea as w, TextInput as T, Th as E, enumOptions as te, fmtDate as D, fmtMoney as O } from "../components/ui.js";
5
+ import { useAnalytics as ne } from "../hooks/useAnalytics.js";
6
+ import { useDeferredValue as k, useMemo as re, useState as A } from "react";
7
+ import { AlertCircle as ie, CheckCircle2 as ae, Eye as oe, Plus as j, Receipt as M, Search as N, Send as se, Wallet as ce, XCircle as P } from "lucide-react";
8
+ import { Fragment as F, jsx as I, jsxs as L } from "react/jsx-runtime";
9
+ import { Button as R } from "@burdenoff/fe-libs/ui";
9
10
  //#region src/proserviceworld/pages/InvoicesPage.tsx
10
- var B = [
11
+ var le = [
11
12
  "DRAFT",
12
13
  "SENT",
13
14
  "PAID",
14
15
  "OVERDUE",
15
16
  "CANCELLED"
16
- ], V = () => {
17
- let [n, r] = A(""), [i, d] = A(""), m = O(i), [x, I] = A(!1), [V, U] = A(null), [W, G] = A(null), { data: K, isLoading: ie, error: q, refetch: ae } = a({
18
- status: n || void 0,
19
- search: m.trim() || void 0
20
- }), { emitFact: oe } = D(), J = o(), Y = e(), X = t({ pagination: { limit: 100 } }), Z = k(() => new Map((X.data?.items ?? []).map((e) => [e.id, e.name])), [X.data]), Q = (K?.items ?? []).filter((e) => e.status === "SENT" || e.status === "OVERDUE"), $ = (K?.items ?? []).filter((e) => e.status === "PAID"), se = Q.reduce((e, t) => e + t.total, 0), ce = $.reduce((e, t) => e + t.total, 0);
21
- return /* @__PURE__ */ R("div", {
17
+ ], z = () => {
18
+ let n = d(), r = u(), [i, h] = A(""), [v, w] = A(""), F = k(v), [z, B] = A(!1), [V, H] = A(null), [U, W] = A(null), { data: G, isLoading: fe, error: K, refetch: pe } = a({
19
+ status: i || void 0,
20
+ search: F.trim() || void 0
21
+ }), { emitFact: me } = ne(), q = s(), J = o(), Y = e(), X = t({ pagination: { limit: 100 } }), Z = re(() => new Map((X.data?.items ?? []).map((e) => [e.id, e.name])), [X.data]), Q = (G?.items ?? []).filter((e) => e.status === "SENT" || e.status === "OVERDUE"), $ = (G?.items ?? []).filter((e) => e.status === "PAID"), he = Q.reduce((e, t) => e + t.total, 0), ge = $.reduce((e, t) => e + t.total, 0);
22
+ return /* @__PURE__ */ L("div", {
22
23
  className: "space-y-6",
23
24
  children: [
24
- /* @__PURE__ */ L(g, {
25
- title: "Invoices",
26
- subtitle: "Assemble invoices from time, milestones and fixed-fee schedules — and track what's outstanding.",
27
- icon: /* @__PURE__ */ L(M, { className: "h-6 w-6" }),
28
- actions: /* @__PURE__ */ R(z, {
29
- onClick: () => I(!0),
30
- children: [/* @__PURE__ */ L(j, { className: "mr-1.5 h-4 w-4" }), "New invoice"]
25
+ /* @__PURE__ */ I(b, {
26
+ title: n("psw.invoices.title", "Invoices"),
27
+ subtitle: n("psw.invoices.subtitle", "Assemble invoices from time, milestones and fixed-fee schedules — and track what's outstanding."),
28
+ icon: /* @__PURE__ */ I(M, { className: "h-6 w-6" }),
29
+ actions: /* @__PURE__ */ L(R, {
30
+ onClick: () => B(!0),
31
+ children: [/* @__PURE__ */ I(j, { className: "me-1.5 h-4 w-4" }), n("psw.invoices.new", "New invoice")]
31
32
  })
32
33
  }),
33
- W && /* @__PURE__ */ L(c, {
34
- tone: W.tone,
35
- onClose: () => G(null),
36
- children: W.text
34
+ U && /* @__PURE__ */ I(f, {
35
+ tone: U.tone,
36
+ onClose: () => W(null),
37
+ children: U.text
37
38
  }),
38
- /* @__PURE__ */ R("div", {
39
+ /* @__PURE__ */ L("div", {
39
40
  className: "grid grid-cols-1 gap-3 sm:grid-cols-3",
40
41
  children: [
41
- /* @__PURE__ */ L(p, {
42
- label: "Invoices",
43
- value: K?.totalCount ?? 0,
44
- icon: /* @__PURE__ */ L(M, { className: "h-4 w-4" })
42
+ /* @__PURE__ */ I(_, {
43
+ label: n("psw.invoices.title", "Invoices"),
44
+ value: G?.totalCount ?? 0,
45
+ icon: /* @__PURE__ */ I(M, { className: "h-4 w-4" })
45
46
  }),
46
- /* @__PURE__ */ L(p, {
47
- label: "Outstanding",
48
- value: E(se),
49
- hint: `${Q.length} sent + overdue`,
50
- icon: /* @__PURE__ */ L(ee, { className: "h-4 w-4" }),
47
+ /* @__PURE__ */ I(_, {
48
+ label: n("psw.invoices.outstanding", "Outstanding"),
49
+ value: O(he),
50
+ hint: n("psw.invoices.outstandingHint", "{{count}} sent + overdue", { count: Q.length }),
51
+ icon: /* @__PURE__ */ I(ie, { className: "h-4 w-4" }),
51
52
  tone: "warning"
52
53
  }),
53
- /* @__PURE__ */ L(p, {
54
- label: "Collected",
55
- value: E(ce),
56
- hint: `${$.length} paid`,
57
- icon: /* @__PURE__ */ L(P, { className: "h-4 w-4" }),
54
+ /* @__PURE__ */ I(_, {
55
+ label: n("psw.invoices.collected", "Collected"),
56
+ value: O(ge),
57
+ hint: n("psw.invoices.paidHint", "{{count}} paid", { count: $.length }),
58
+ icon: /* @__PURE__ */ I(ce, { className: "h-4 w-4" }),
58
59
  tone: "success"
59
60
  })
60
61
  ]
61
62
  }),
62
- /* @__PURE__ */ R("div", {
63
+ /* @__PURE__ */ L("div", {
63
64
  className: "flex flex-col gap-2 sm:flex-row sm:items-center",
64
- children: [/* @__PURE__ */ R("div", {
65
+ children: [/* @__PURE__ */ L("div", {
65
66
  className: "relative flex-1",
66
- children: [/* @__PURE__ */ L(N, { className: "pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-tertiary" }), /* @__PURE__ */ L(S, {
67
- placeholder: "Search invoices…",
68
- value: i,
69
- onChange: (e) => d(e.target.value),
67
+ children: [/* @__PURE__ */ I(N, { className: "pointer-events-none absolute start-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-tertiary" }), /* @__PURE__ */ I(T, {
68
+ placeholder: n("psw.invoices.searchPlaceholder", "Search invoices…"),
69
+ value: v,
70
+ onChange: (e) => w(e.target.value),
70
71
  onKeyDown: (e) => {
71
- e.key === "Enter" && i.trim() && oe("psw.search.performed", {
72
+ e.key === "Enter" && v.trim() && me("psw.search.performed", {
72
73
  entityType: "invoice",
73
- queryLength: i.trim().length
74
+ queryLength: v.trim().length
74
75
  });
75
76
  },
76
- className: "pl-9"
77
+ className: "ps-9"
77
78
  })]
78
- }), /* @__PURE__ */ R(h, {
79
- value: n,
80
- onChange: (e) => r(e.target.value),
79
+ }), /* @__PURE__ */ L(y, {
80
+ value: i,
81
+ onChange: (e) => h(e.target.value),
81
82
  className: "sm:w-48",
82
- children: [/* @__PURE__ */ L("option", {
83
+ children: [/* @__PURE__ */ I("option", {
83
84
  value: "",
84
- children: "All statuses"
85
- }), w(B)]
85
+ children: n("psw.common.allStatuses", "All statuses")
86
+ }), te(le, r)]
86
87
  })]
87
88
  }),
88
- ie ? /* @__PURE__ */ L(f, {}) : q ? /* @__PURE__ */ L(u, {
89
- error: q,
90
- onRetry: () => void ae()
91
- }) : !K || K.items.length === 0 ? /* @__PURE__ */ L(l, {
92
- title: "No invoices yet",
93
- description: "Raise an invoice for a client to start tracking receivables.",
94
- icon: /* @__PURE__ */ L(M, { className: "h-8 w-8" }),
95
- action: /* @__PURE__ */ R(z, {
96
- onClick: () => I(!0),
97
- children: [/* @__PURE__ */ L(j, { className: "mr-1.5 h-4 w-4" }), "New invoice"]
89
+ fe ? /* @__PURE__ */ I(g, {}) : K ? /* @__PURE__ */ I(m, {
90
+ error: K,
91
+ onRetry: () => void pe()
92
+ }) : !G || G.items.length === 0 ? /* @__PURE__ */ I(p, {
93
+ title: n("psw.invoices.emptyTitle", "No invoices yet"),
94
+ description: n("psw.invoices.emptyDescription", "Raise an invoice for a client to start tracking receivables."),
95
+ icon: /* @__PURE__ */ I(M, { className: "h-8 w-8" }),
96
+ action: /* @__PURE__ */ L(R, {
97
+ onClick: () => B(!0),
98
+ children: [/* @__PURE__ */ I(j, { className: "me-1.5 h-4 w-4" }), n("psw.invoices.new", "New invoice")]
98
99
  })
99
- }) : /* @__PURE__ */ L(_, {
100
- title: "Invoices",
101
- children: /* @__PURE__ */ R(y, { children: [/* @__PURE__ */ L("thead", { children: /* @__PURE__ */ R("tr", { children: [
102
- /* @__PURE__ */ L(C, { children: "Number" }),
103
- /* @__PURE__ */ L(C, { children: "Client" }),
104
- /* @__PURE__ */ L(C, { children: "Total" }),
105
- /* @__PURE__ */ L(C, { children: "Status" }),
106
- /* @__PURE__ */ L(C, { children: "Due" }),
107
- /* @__PURE__ */ L(C, {
108
- className: "text-right",
109
- children: "Actions"
100
+ }) : /* @__PURE__ */ I(ee, {
101
+ title: l(n, "psw.invoices.count", G.totalCount, "{{count}} invoice", "{{count}} invoices"),
102
+ children: /* @__PURE__ */ L(S, { children: [/* @__PURE__ */ I("thead", { children: /* @__PURE__ */ L("tr", { children: [
103
+ /* @__PURE__ */ I(E, { children: n("psw.invoices.number", "Number") }),
104
+ /* @__PURE__ */ I(E, { children: n("psw.common.client", "Client") }),
105
+ /* @__PURE__ */ I(E, { children: n("psw.invoices.total", "Total") }),
106
+ /* @__PURE__ */ I(E, { children: n("psw.common.status", "Status") }),
107
+ /* @__PURE__ */ I(E, { children: n("psw.common.due", "Due") }),
108
+ /* @__PURE__ */ I(E, {
109
+ className: "text-end",
110
+ children: n("psw.common.actions", "Actions")
110
111
  })
111
- ] }) }), /* @__PURE__ */ L("tbody", { children: K.items.map((e) => /* @__PURE__ */ R("tr", {
112
+ ] }) }), /* @__PURE__ */ I("tbody", { children: G.items.map((e) => /* @__PURE__ */ L("tr", {
112
113
  className: "transition-colors hover:bg-bg-sunken/60",
113
114
  children: [
114
- /* @__PURE__ */ L(b, { children: /* @__PURE__ */ L("span", {
115
+ /* @__PURE__ */ I(C, { children: /* @__PURE__ */ I("span", {
115
116
  className: "font-medium text-text-primary",
116
117
  children: e.number
117
118
  }) }),
118
- /* @__PURE__ */ L(b, {
119
+ /* @__PURE__ */ I(C, {
119
120
  className: "text-text-primary",
120
121
  children: Z.get(e.clientId) ?? "—"
121
122
  }),
122
- /* @__PURE__ */ L(b, {
123
+ /* @__PURE__ */ I(C, {
123
124
  className: "whitespace-nowrap font-semibold text-text-primary",
124
- children: E(e.total, e.currency)
125
+ children: O(e.total, e.currency)
125
126
  }),
126
- /* @__PURE__ */ L(b, { children: /* @__PURE__ */ L(v, { status: e.status }) }),
127
- /* @__PURE__ */ L(b, {
128
- className: s("whitespace-nowrap", e.status === "OVERDUE" && "font-medium text-status-error-text"),
129
- children: T(e.dueDate)
127
+ /* @__PURE__ */ I(C, { children: /* @__PURE__ */ I(x, { status: e.status }) }),
128
+ /* @__PURE__ */ I(C, {
129
+ className: c("whitespace-nowrap", e.status === "OVERDUE" && "font-medium text-status-error-text"),
130
+ children: D(e.dueDate)
130
131
  }),
131
- /* @__PURE__ */ L(b, {
132
- className: "text-right",
133
- children: /* @__PURE__ */ R("div", {
132
+ /* @__PURE__ */ I(C, {
133
+ className: "text-end",
134
+ children: /* @__PURE__ */ L("div", {
134
135
  className: "flex items-center justify-end gap-1",
135
136
  children: [
136
- /* @__PURE__ */ R(z, {
137
+ /* @__PURE__ */ L(R, {
137
138
  variant: "ghost",
138
139
  size: "sm",
139
- onClick: () => U(e.id),
140
- children: [/* @__PURE__ */ L(ne, { className: "mr-1 h-4 w-4" }), "View"]
140
+ onClick: () => H(e.id),
141
+ children: [/* @__PURE__ */ I(oe, { className: "me-1 h-4 w-4" }), n("psw.invoices.view", "View")]
141
142
  }),
142
- e.status !== "PAID" && e.status !== "CANCELLED" && /* @__PURE__ */ R(z, {
143
+ e.status === "DRAFT" && /* @__PURE__ */ L(R, {
144
+ variant: "ghost",
145
+ size: "sm",
146
+ disabled: q.isPending,
147
+ onClick: () => q.mutate(e.id, {
148
+ onSuccess: () => W({
149
+ tone: "success",
150
+ text: n("psw.invoices.sent", "{{number}} sent.", { number: e.number })
151
+ }),
152
+ onError: (e) => W({
153
+ tone: "danger",
154
+ text: e instanceof Error ? e.message : n("psw.common.failed", "Failed.")
155
+ })
156
+ }),
157
+ children: [/* @__PURE__ */ I(se, { className: "me-1 h-4 w-4" }), n("psw.invoices.send", "Send")]
158
+ }),
159
+ (e.status === "SENT" || e.status === "OVERDUE") && /* @__PURE__ */ L(R, {
143
160
  variant: "ghost",
144
161
  size: "sm",
145
162
  disabled: J.isPending,
146
163
  onClick: () => J.mutate(e.id, {
147
- onSuccess: () => G({
164
+ onSuccess: () => W({
148
165
  tone: "success",
149
- text: `${e.number} marked paid.`
166
+ text: n("psw.invoices.markedPaid", "{{number}} marked paid.", { number: e.number })
150
167
  }),
151
- onError: (e) => G({
168
+ onError: (e) => W({
152
169
  tone: "danger",
153
- text: e instanceof Error ? e.message : "Failed."
170
+ text: e instanceof Error ? e.message : n("psw.common.failed", "Failed.")
154
171
  })
155
172
  }),
156
- children: [/* @__PURE__ */ L(te, { className: "mr-1 h-4 w-4" }), "Mark paid"]
173
+ children: [/* @__PURE__ */ I(ae, { className: "me-1 h-4 w-4" }), n("psw.invoices.markPaid", "Mark paid")]
157
174
  }),
158
- (e.status === "DRAFT" || e.status === "SENT") && /* @__PURE__ */ R(z, {
175
+ (e.status === "DRAFT" || e.status === "SENT") && /* @__PURE__ */ L(R, {
159
176
  variant: "ghost",
160
177
  size: "sm",
161
178
  disabled: Y.isPending,
162
179
  onClick: () => Y.mutate(e.id, {
163
- onSuccess: () => G({
180
+ onSuccess: () => W({
164
181
  tone: "success",
165
- text: `${e.number} cancelled.`
182
+ text: n("psw.invoices.cancelled", "{{number}} cancelled.", { number: e.number })
166
183
  }),
167
- onError: (e) => G({
184
+ onError: (e) => W({
168
185
  tone: "danger",
169
- text: e instanceof Error ? e.message : "Failed."
186
+ text: e instanceof Error ? e.message : n("psw.common.failed", "Failed.")
170
187
  })
171
188
  }),
172
- children: [/* @__PURE__ */ L(F, { className: "mr-1 h-4 w-4" }), "Cancel"]
189
+ children: [/* @__PURE__ */ I(P, { className: "me-1 h-4 w-4" }), n("psw.common.cancel", "Cancel")]
173
190
  })
174
191
  ]
175
192
  })
@@ -177,144 +194,144 @@ var B = [
177
194
  ]
178
195
  }, e.id)) })] })
179
196
  }),
180
- x && /* @__PURE__ */ L(re, {
181
- onClose: () => I(!1),
182
- onSaved: (e) => G({
197
+ z && /* @__PURE__ */ I(de, {
198
+ onClose: () => B(!1),
199
+ onSaved: (e) => W({
183
200
  tone: "success",
184
- text: `${e} created.`
201
+ text: n("psw.invoices.created", "{{number}} created.", { number: e })
185
202
  })
186
203
  }),
187
- V && /* @__PURE__ */ L(H, {
204
+ V && /* @__PURE__ */ I(ue, {
188
205
  id: V,
189
206
  clientName: Z,
190
- onClose: () => U(null),
207
+ onClose: () => H(null),
191
208
  onCancelled: (e) => {
192
- U(null), G({
209
+ H(null), W({
193
210
  tone: "success",
194
- text: `${e} cancelled.`
211
+ text: n("psw.invoices.cancelled", "{{number}} cancelled.", { number: e })
195
212
  });
196
213
  }
197
214
  })
198
215
  ]
199
216
  });
200
- }, H = ({ id: t, clientName: n, onClose: r, onCancelled: a }) => {
201
- let { data: o, isLoading: s, error: d } = i(t), p = e(), [h, g] = A(null);
202
- return /* @__PURE__ */ L(m, {
217
+ }, ue = ({ id: t, clientName: n, onClose: r, onCancelled: a }) => {
218
+ let o = d(), s = u(), { data: c, isLoading: l, error: h } = i(t), _ = e(), [y, b] = A(null);
219
+ return /* @__PURE__ */ I(v, {
203
220
  open: !0,
204
221
  onClose: r,
205
- title: o ? `Invoice ${o.number}` : "Invoice",
206
- footer: /* @__PURE__ */ R(I, { children: [/* @__PURE__ */ L(z, {
222
+ title: c ? o("psw.invoices.detailTitle", "Invoice {{number}}", { number: c.number }) : o("psw.invoices.invoice", "Invoice"),
223
+ footer: /* @__PURE__ */ L(F, { children: [/* @__PURE__ */ I(R, {
207
224
  variant: "outline",
208
225
  onClick: r,
209
- children: "Close"
210
- }), o && (o.status === "DRAFT" || o.status === "SENT") && /* @__PURE__ */ R(z, {
226
+ children: o("psw.common.close", "Close")
227
+ }), c && (c.status === "DRAFT" || c.status === "SENT") && /* @__PURE__ */ L(R, {
211
228
  variant: "destructive",
212
- disabled: p.isPending,
229
+ disabled: _.isPending,
213
230
  onClick: () => {
214
- g(null), p.mutate(o.id, {
215
- onSuccess: () => a(o.number),
216
- onError: (e) => g(e instanceof Error ? e.message : "Failed.")
231
+ b(null), _.mutate(c.id, {
232
+ onSuccess: () => a(c.number),
233
+ onError: (e) => b(e instanceof Error ? e.message : o("psw.common.failed", "Failed."))
217
234
  });
218
235
  },
219
- children: [/* @__PURE__ */ L(F, { className: "mr-1.5 h-4 w-4" }), p.isPending ? "Cancelling…" : "Cancel invoice"]
236
+ children: [/* @__PURE__ */ I(P, { className: "me-1.5 h-4 w-4" }), _.isPending ? o("psw.invoices.cancelling", "Cancelling…") : o("psw.invoices.cancelInvoice", "Cancel invoice")]
220
237
  })] }),
221
- children: /* @__PURE__ */ R("div", {
238
+ children: /* @__PURE__ */ L("div", {
222
239
  className: "space-y-3",
223
- children: [h && /* @__PURE__ */ L(c, {
240
+ children: [y && /* @__PURE__ */ I(f, {
224
241
  tone: "danger",
225
- children: h
226
- }), s ? /* @__PURE__ */ L(f, {}) : d ? /* @__PURE__ */ L(u, { error: d }) : o ? /* @__PURE__ */ R(I, { children: [
227
- /* @__PURE__ */ R("div", {
242
+ children: y
243
+ }), l ? /* @__PURE__ */ I(g, {}) : h ? /* @__PURE__ */ I(m, { error: h }) : c ? /* @__PURE__ */ L(F, { children: [
244
+ /* @__PURE__ */ L("div", {
228
245
  className: "grid grid-cols-2 gap-3 text-sm",
229
246
  children: [
230
- /* @__PURE__ */ R("div", { children: [/* @__PURE__ */ L("div", {
247
+ /* @__PURE__ */ L("div", { children: [/* @__PURE__ */ I("div", {
231
248
  className: "text-text-tertiary",
232
- children: "Client"
233
- }), /* @__PURE__ */ L("div", {
249
+ children: o("psw.common.client", "Client")
250
+ }), /* @__PURE__ */ I("div", {
234
251
  className: "font-medium text-text-primary",
235
- children: n.get(o.clientId) ?? "—"
252
+ children: n.get(c.clientId) ?? "—"
236
253
  })] }),
237
- /* @__PURE__ */ R("div", { children: [/* @__PURE__ */ L("div", {
254
+ /* @__PURE__ */ L("div", { children: [/* @__PURE__ */ I("div", {
238
255
  className: "text-text-tertiary",
239
- children: "Status"
240
- }), /* @__PURE__ */ L(v, { status: o.status })] }),
241
- /* @__PURE__ */ R("div", { children: [/* @__PURE__ */ L("div", {
256
+ children: o("psw.common.status", "Status")
257
+ }), /* @__PURE__ */ I(x, { status: c.status })] }),
258
+ /* @__PURE__ */ L("div", { children: [/* @__PURE__ */ I("div", {
242
259
  className: "text-text-tertiary",
243
- children: "Issue date"
244
- }), /* @__PURE__ */ L("div", {
260
+ children: o("psw.invoices.issueDate", "Issue date")
261
+ }), /* @__PURE__ */ I("div", {
245
262
  className: "text-text-primary",
246
- children: T(o.issueDate)
263
+ children: D(c.issueDate)
247
264
  })] }),
248
- /* @__PURE__ */ R("div", { children: [/* @__PURE__ */ L("div", {
265
+ /* @__PURE__ */ L("div", { children: [/* @__PURE__ */ I("div", {
249
266
  className: "text-text-tertiary",
250
- children: "Due date"
251
- }), /* @__PURE__ */ L("div", {
267
+ children: o("psw.common.dueDate", "Due date")
268
+ }), /* @__PURE__ */ I("div", {
252
269
  className: "text-text-primary",
253
- children: T(o.dueDate)
270
+ children: D(c.dueDate)
254
271
  })] }),
255
- /* @__PURE__ */ R("div", { children: [/* @__PURE__ */ L("div", {
272
+ /* @__PURE__ */ L("div", { children: [/* @__PURE__ */ I("div", {
256
273
  className: "text-text-tertiary",
257
- children: "Sent"
258
- }), /* @__PURE__ */ L("div", {
274
+ children: o("psw.invoices.sentAt", "Sent")
275
+ }), /* @__PURE__ */ I("div", {
259
276
  className: "text-text-primary",
260
- children: T(o.sentAt)
277
+ children: D(c.sentAt)
261
278
  })] }),
262
- /* @__PURE__ */ R("div", { children: [/* @__PURE__ */ L("div", {
279
+ /* @__PURE__ */ L("div", { children: [/* @__PURE__ */ I("div", {
263
280
  className: "text-text-tertiary",
264
- children: "Paid"
265
- }), /* @__PURE__ */ L("div", {
281
+ children: o("psw.invoices.paidAt", "Paid")
282
+ }), /* @__PURE__ */ I("div", {
266
283
  className: "text-text-primary",
267
- children: T(o.paidAt)
284
+ children: D(c.paidAt)
268
285
  })] })
269
286
  ]
270
287
  }),
271
- o.lineItems && o.lineItems.length > 0 && /* @__PURE__ */ R(y, { children: [/* @__PURE__ */ L("thead", { children: /* @__PURE__ */ R("tr", { children: [
272
- /* @__PURE__ */ L(C, { children: "Source" }),
273
- /* @__PURE__ */ L(C, { children: "Description" }),
274
- /* @__PURE__ */ L(C, {
275
- className: "text-right",
276
- children: "Amount"
288
+ c.lineItems && c.lineItems.length > 0 && /* @__PURE__ */ L(S, { children: [/* @__PURE__ */ I("thead", { children: /* @__PURE__ */ L("tr", { children: [
289
+ /* @__PURE__ */ I(E, { children: o("psw.invoices.source", "Source") }),
290
+ /* @__PURE__ */ I(E, { children: o("psw.common.description", "Description") }),
291
+ /* @__PURE__ */ I(E, {
292
+ className: "text-end",
293
+ children: o("psw.common.amount", "Amount")
277
294
  })
278
- ] }) }), /* @__PURE__ */ L("tbody", { children: o.lineItems.map((e, t) => /* @__PURE__ */ R("tr", { children: [
279
- /* @__PURE__ */ L(b, { children: e.sourceType }),
280
- /* @__PURE__ */ L(b, { children: e.description ?? e.sourceId }),
281
- /* @__PURE__ */ L(b, {
282
- className: "text-right",
283
- children: E(e.amount, o.currency)
295
+ ] }) }), /* @__PURE__ */ I("tbody", { children: c.lineItems.map((e, t) => /* @__PURE__ */ L("tr", { children: [
296
+ /* @__PURE__ */ I(C, { children: s(e.sourceType) }),
297
+ /* @__PURE__ */ I(C, { children: e.description ?? e.sourceId }),
298
+ /* @__PURE__ */ I(C, {
299
+ className: "text-end",
300
+ children: O(e.amount, c.currency)
284
301
  })
285
302
  ] }, `${e.sourceType}-${e.sourceId}-${t}`)) })] }),
286
- /* @__PURE__ */ R("div", {
303
+ /* @__PURE__ */ L("div", {
287
304
  className: "rounded-lg bg-bg-sunken px-3 py-2 text-sm text-text-secondary",
288
305
  children: [
289
- /* @__PURE__ */ R("div", {
306
+ /* @__PURE__ */ L("div", {
290
307
  className: "flex justify-between",
291
- children: [/* @__PURE__ */ L("span", { children: "Subtotal" }), /* @__PURE__ */ L("span", { children: E(o.subtotal, o.currency) })]
308
+ children: [/* @__PURE__ */ I("span", { children: o("psw.invoices.subtotal", "Subtotal") }), /* @__PURE__ */ I("span", { children: O(c.subtotal, c.currency) })]
292
309
  }),
293
- /* @__PURE__ */ R("div", {
310
+ /* @__PURE__ */ L("div", {
294
311
  className: "flex justify-between",
295
- children: [/* @__PURE__ */ L("span", { children: "Tax" }), /* @__PURE__ */ L("span", { children: E(o.taxAmount, o.currency) })]
312
+ children: [/* @__PURE__ */ I("span", { children: o("psw.invoices.tax", "Tax") }), /* @__PURE__ */ I("span", { children: O(c.taxAmount, c.currency) })]
296
313
  }),
297
- /* @__PURE__ */ R("div", {
314
+ /* @__PURE__ */ L("div", {
298
315
  className: "flex justify-between font-semibold text-text-primary",
299
- children: [/* @__PURE__ */ L("span", { children: "Total" }), /* @__PURE__ */ L("span", { children: E(o.total, o.currency) })]
316
+ children: [/* @__PURE__ */ I("span", { children: o("psw.invoices.total", "Total") }), /* @__PURE__ */ I("span", { children: O(c.total, c.currency) })]
300
317
  })
301
318
  ]
302
319
  }),
303
- o.notes && /* @__PURE__ */ R("div", { children: [/* @__PURE__ */ L("div", {
320
+ c.notes && /* @__PURE__ */ L("div", { children: [/* @__PURE__ */ I("div", {
304
321
  className: "text-sm text-text-tertiary",
305
- children: "Notes"
306
- }), /* @__PURE__ */ L("div", {
322
+ children: o("psw.common.notes", "Notes")
323
+ }), /* @__PURE__ */ I("div", {
307
324
  className: "text-sm text-text-primary",
308
- children: o.notes
325
+ children: c.notes
309
326
  })] })
310
- ] }) : /* @__PURE__ */ L(l, {
311
- title: "Invoice not found",
312
- icon: /* @__PURE__ */ L(M, { className: "h-8 w-8" })
327
+ ] }) : /* @__PURE__ */ I(p, {
328
+ title: o("psw.invoices.notFound", "Invoice not found"),
329
+ icon: /* @__PURE__ */ I(M, { className: "h-8 w-8" })
313
330
  })]
314
331
  })
315
332
  });
316
- }, re = ({ onClose: e, onSaved: i }) => {
317
- let a = n(), o = t({ pagination: { limit: 100 } }), [s, l] = A({
333
+ }, de = ({ onClose: e, onSaved: i }) => {
334
+ let a = d(), o = n(), s = t({ pagination: { limit: 100 } }), [c, l] = A({
318
335
  clientId: "",
319
336
  engagementId: "",
320
337
  number: "",
@@ -324,159 +341,159 @@ var B = [
324
341
  issueDate: (/* @__PURE__ */ new Date()).toISOString().slice(0, 10),
325
342
  dueDate: "",
326
343
  notes: ""
327
- }), [u, f] = A(null), p = r({
328
- clientId: s.clientId || void 0,
344
+ }), [u, p] = A(null), m = r({
345
+ clientId: c.clientId || void 0,
329
346
  pagination: { limit: 100 }
330
347
  }), g = (e) => (t) => l((n) => ({
331
348
  ...n,
332
349
  [e]: t.target.value
333
- })), _ = (Number(s.subtotal) || 0) + (Number(s.taxAmount) || 0);
334
- return /* @__PURE__ */ L(m, {
350
+ })), _ = (Number(c.subtotal) || 0) + (Number(c.taxAmount) || 0);
351
+ return /* @__PURE__ */ I(v, {
335
352
  open: !0,
336
353
  onClose: e,
337
- title: "New invoice",
338
- footer: /* @__PURE__ */ R(I, { children: [/* @__PURE__ */ L(z, {
354
+ title: a("psw.invoices.new", "New invoice"),
355
+ footer: /* @__PURE__ */ L(F, { children: [/* @__PURE__ */ I(R, {
339
356
  variant: "outline",
340
357
  onClick: e,
341
- disabled: a.isPending,
342
- children: "Cancel"
343
- }), /* @__PURE__ */ L(z, {
358
+ disabled: o.isPending,
359
+ children: a("psw.common.cancel", "Cancel")
360
+ }), /* @__PURE__ */ I(R, {
344
361
  onClick: () => {
345
- if (f(null), !s.clientId) return f("Select a client.");
346
- if (!s.number.trim()) return f("Invoice number is required.");
347
- a.mutate({
348
- clientId: s.clientId,
349
- engagementId: s.engagementId || null,
350
- number: s.number.trim(),
351
- currency: s.currency || "USD",
352
- subtotal: Number(s.subtotal) || 0,
353
- taxAmount: Number(s.taxAmount) || 0,
362
+ if (p(null), !c.clientId) return p(a("psw.invoices.selectClient", "Select a client."));
363
+ if (!c.number.trim()) return p(a("psw.invoices.numberRequired", "Invoice number is required."));
364
+ o.mutate({
365
+ clientId: c.clientId,
366
+ engagementId: c.engagementId || null,
367
+ number: c.number.trim(),
368
+ currency: c.currency || "USD",
369
+ subtotal: Number(c.subtotal) || 0,
370
+ taxAmount: Number(c.taxAmount) || 0,
354
371
  total: _,
355
- issueDate: s.issueDate ? new Date(s.issueDate).toISOString() : null,
356
- dueDate: s.dueDate ? new Date(s.dueDate).toISOString() : null,
357
- notes: s.notes.trim() || null
372
+ issueDate: c.issueDate ? new Date(c.issueDate).toISOString() : null,
373
+ dueDate: c.dueDate ? new Date(c.dueDate).toISOString() : null,
374
+ notes: c.notes.trim() || null
358
375
  }, {
359
376
  onSuccess: () => {
360
- i(s.number.trim()), e();
377
+ i(c.number.trim()), e();
361
378
  },
362
- onError: (e) => f(e instanceof Error ? e.message : "Failed.")
379
+ onError: (e) => p(e instanceof Error ? e.message : a("psw.common.failed", "Failed."))
363
380
  });
364
381
  },
365
- disabled: a.isPending,
366
- children: a.isPending ? "Creating…" : "Create invoice"
382
+ disabled: o.isPending,
383
+ children: o.isPending ? a("psw.common.creating", "Creating…") : a("psw.invoices.create", "Create invoice")
367
384
  })] }),
368
- children: /* @__PURE__ */ R("div", {
385
+ children: /* @__PURE__ */ L("div", {
369
386
  className: "space-y-3",
370
387
  children: [
371
- u && /* @__PURE__ */ L(c, {
388
+ u && /* @__PURE__ */ I(f, {
372
389
  tone: "danger",
373
390
  children: u
374
391
  }),
375
- /* @__PURE__ */ R("div", {
392
+ /* @__PURE__ */ L("div", {
376
393
  className: "grid grid-cols-2 gap-3",
377
- children: [/* @__PURE__ */ L(d, {
378
- label: "Client",
394
+ children: [/* @__PURE__ */ I(h, {
395
+ label: a("psw.common.client", "Client"),
379
396
  required: !0,
380
- children: /* @__PURE__ */ R(h, {
381
- value: s.clientId,
397
+ children: /* @__PURE__ */ L(y, {
398
+ value: c.clientId,
382
399
  onChange: g("clientId"),
383
- children: [/* @__PURE__ */ L("option", {
400
+ children: [/* @__PURE__ */ I("option", {
384
401
  value: "",
385
- children: "Select…"
386
- }), o.data?.items.map((e) => /* @__PURE__ */ L("option", {
402
+ children: a("psw.common.select", "Select…")
403
+ }), s.data?.items.map((e) => /* @__PURE__ */ I("option", {
387
404
  value: e.id,
388
405
  children: e.name
389
406
  }, e.id))]
390
407
  })
391
- }), /* @__PURE__ */ L(d, {
392
- label: "Number",
408
+ }), /* @__PURE__ */ I(h, {
409
+ label: a("psw.invoices.number", "Number"),
393
410
  required: !0,
394
- children: /* @__PURE__ */ L(S, {
395
- value: s.number,
411
+ children: /* @__PURE__ */ I(T, {
412
+ value: c.number,
396
413
  onChange: g("number"),
397
414
  placeholder: "INV-2026-014"
398
415
  })
399
416
  })]
400
417
  }),
401
- /* @__PURE__ */ L(d, {
402
- label: "Engagement (optional)",
403
- children: /* @__PURE__ */ R(h, {
404
- value: s.engagementId,
418
+ /* @__PURE__ */ I(h, {
419
+ label: a("psw.invoices.engagementOptional", "Engagement (optional)"),
420
+ children: /* @__PURE__ */ L(y, {
421
+ value: c.engagementId,
405
422
  onChange: g("engagementId"),
406
- disabled: !s.clientId,
407
- children: [/* @__PURE__ */ L("option", {
423
+ disabled: !c.clientId,
424
+ children: [/* @__PURE__ */ I("option", {
408
425
  value: "",
409
- children: "None"
410
- }), p.data?.items.map((e) => /* @__PURE__ */ L("option", {
426
+ children: a("psw.common.none", "None")
427
+ }), m.data?.items.map((e) => /* @__PURE__ */ I("option", {
411
428
  value: e.id,
412
429
  children: e.name
413
430
  }, e.id))]
414
431
  })
415
432
  }),
416
- /* @__PURE__ */ R("div", {
433
+ /* @__PURE__ */ L("div", {
417
434
  className: "grid grid-cols-3 gap-3",
418
435
  children: [
419
- /* @__PURE__ */ L(d, {
420
- label: "Subtotal",
421
- children: /* @__PURE__ */ L(S, {
436
+ /* @__PURE__ */ I(h, {
437
+ label: a("psw.invoices.subtotal", "Subtotal"),
438
+ children: /* @__PURE__ */ I(T, {
422
439
  type: "number",
423
440
  min: "0",
424
- value: s.subtotal,
441
+ value: c.subtotal,
425
442
  onChange: g("subtotal")
426
443
  })
427
444
  }),
428
- /* @__PURE__ */ L(d, {
429
- label: "Tax",
430
- children: /* @__PURE__ */ L(S, {
445
+ /* @__PURE__ */ I(h, {
446
+ label: a("psw.invoices.tax", "Tax"),
447
+ children: /* @__PURE__ */ I(T, {
431
448
  type: "number",
432
449
  min: "0",
433
- value: s.taxAmount,
450
+ value: c.taxAmount,
434
451
  onChange: g("taxAmount")
435
452
  })
436
453
  }),
437
- /* @__PURE__ */ L(d, {
438
- label: "Currency",
439
- children: /* @__PURE__ */ L(S, {
440
- value: s.currency,
454
+ /* @__PURE__ */ I(h, {
455
+ label: a("psw.invoices.currency", "Currency"),
456
+ children: /* @__PURE__ */ I(T, {
457
+ value: c.currency,
441
458
  onChange: g("currency"),
442
459
  maxLength: 3
443
460
  })
444
461
  })
445
462
  ]
446
463
  }),
447
- /* @__PURE__ */ R("div", {
464
+ /* @__PURE__ */ L("div", {
448
465
  className: "rounded-lg bg-bg-sunken px-3 py-2 text-sm text-text-secondary",
449
466
  children: [
450
- "Total:",
467
+ a("psw.invoices.totalLabel", "Total:"),
451
468
  " ",
452
- /* @__PURE__ */ L("span", {
469
+ /* @__PURE__ */ I("span", {
453
470
  className: "font-semibold text-text-primary",
454
- children: E(_, s.currency)
471
+ children: O(_, c.currency)
455
472
  })
456
473
  ]
457
474
  }),
458
- /* @__PURE__ */ R("div", {
475
+ /* @__PURE__ */ L("div", {
459
476
  className: "grid grid-cols-2 gap-3",
460
- children: [/* @__PURE__ */ L(d, {
461
- label: "Issue date",
462
- children: /* @__PURE__ */ L(S, {
477
+ children: [/* @__PURE__ */ I(h, {
478
+ label: a("psw.invoices.issueDate", "Issue date"),
479
+ children: /* @__PURE__ */ I(T, {
463
480
  type: "date",
464
- value: s.issueDate,
481
+ value: c.issueDate,
465
482
  onChange: g("issueDate")
466
483
  })
467
- }), /* @__PURE__ */ L(d, {
468
- label: "Due date",
469
- children: /* @__PURE__ */ L(S, {
484
+ }), /* @__PURE__ */ I(h, {
485
+ label: a("psw.common.dueDate", "Due date"),
486
+ children: /* @__PURE__ */ I(T, {
470
487
  type: "date",
471
- value: s.dueDate,
488
+ value: c.dueDate,
472
489
  onChange: g("dueDate")
473
490
  })
474
491
  })]
475
492
  }),
476
- /* @__PURE__ */ L(d, {
477
- label: "Notes",
478
- children: /* @__PURE__ */ L(x, {
479
- value: s.notes,
493
+ /* @__PURE__ */ I(h, {
494
+ label: a("psw.common.notes", "Notes"),
495
+ children: /* @__PURE__ */ I(w, {
496
+ value: c.notes,
480
497
  onChange: g("notes")
481
498
  })
482
499
  })
@@ -485,6 +502,6 @@ var B = [
485
502
  });
486
503
  };
487
504
  //#endregion
488
- export { V as InvoicesPage };
505
+ export { z as InvoicesPage };
489
506
 
490
507
  //# sourceMappingURL=InvoicesPage.js.map