@tesouro/embedded-components-react 0.2.304 → 0.2.306

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 (63) hide show
  1. package/dist/index.d.ts +9 -9
  2. package/dist/index.js +31 -31
  3. package/dist/lib/ExpenseApprovalPoliciesWidget.js +2 -2
  4. package/dist/lib/ExpenseManagementWidget.d.ts +24 -24
  5. package/dist/lib/ExpenseManagementWidget.js +1 -1
  6. package/dist/lib/ReceiptMatchWidget.js +2 -2
  7. package/dist/lib/UploadReceiptWidget.d.ts +2 -2
  8. package/dist/lib/UploadReceiptWidget.js +2 -2
  9. package/dist/libs/tesouro-embedded-components-react/{expense-receipt-match-widget → expense-management-widget}/data-access/dist/index2.js +1 -1
  10. package/dist/libs/tesouro-embedded-components-react/{expense-receipt-match-widget → expense-management-widget}/data-access/dist/index3.js +1 -1
  11. package/dist/libs/tesouro-embedded-components-react/{expense-receipt-match-widget → expense-management-widget}/data-access/dist/index4.js +1 -1
  12. package/dist/libs/tesouro-embedded-components-react/{expense-receipt-match-widget → expense-management-widget}/data-access/dist/index5.js +1 -1
  13. package/dist/libs/tesouro-embedded-components-react/{expense-receipt-match-widget → expense-management-widget}/data-access/dist/index6.js +1 -1
  14. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/feature/dist/index.js +6 -2
  15. package/dist/libs/tesouro-embedded-components-react/{expense-receipt-match-widget/feature/dist/lib/useReceiptMatch.js → expense-management-widget/feature/dist/index10.js} +12 -12
  16. package/dist/libs/tesouro-embedded-components-react/{expense-receipt-match-widget/feature/dist/lib/analytics/events.js → expense-management-widget/feature/dist/index11.js} +1 -1
  17. package/dist/libs/tesouro-embedded-components-react/{expense-receipt-match-widget/feature/dist/lib/ReceiptMatchWidget.js → expense-management-widget/feature/dist/index12.js} +10 -10
  18. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/feature/dist/index2.js +2 -2
  19. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/feature/dist/index3.js +251 -46
  20. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/feature/dist/index4.js +22 -1
  21. package/dist/libs/tesouro-embedded-components-react/{expense-approval-policies-widget/feature/dist/lib/ExpenseApprovalPoliciesWidgetFeature.js → expense-management-widget/feature/dist/index5.js} +19 -20
  22. package/dist/libs/tesouro-embedded-components-react/{expense-upload-receipt-widget/feature/dist/lib/UploadReceiptWidget.js → expense-management-widget/feature/dist/index6.js} +8 -8
  23. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/feature/dist/index7.js +4 -0
  24. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/feature/dist/index8.js +49 -0
  25. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/feature/dist/index9.js +1 -0
  26. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/index.js +17 -1
  27. package/dist/libs/tesouro-embedded-components-react/{expense-approval-policies-widget/ui/dist/index6.js → expense-management-widget/ui/dist/lib/ExpenseApprovalPoliciesWidget/lib/ApprovalRuleCard.js} +5 -5
  28. package/dist/libs/tesouro-embedded-components-react/{expense-approval-policies-widget/ui/dist/index7.js → expense-management-widget/ui/dist/lib/ExpenseApprovalPoliciesWidget/lib/ApprovalRuleForm.js} +4 -4
  29. package/dist/libs/tesouro-embedded-components-react/{expense-approval-policies-widget/ui/dist/index5.js → expense-management-widget/ui/dist/lib/ExpenseApprovalPoliciesWidget/lib/EmptyApprovalRules.js} +3 -3
  30. package/dist/libs/tesouro-embedded-components-react/{expense-approval-policies-widget/ui/dist/index8.js → expense-management-widget/ui/dist/lib/ExpenseApprovalPoliciesWidget/lib/ExpenseApprovalsPage.js} +7 -7
  31. package/dist/libs/tesouro-embedded-components-react/{expense-approval-policies-widget/ui/dist/index4.js → expense-management-widget/ui/dist/lib/ExpenseApprovalPoliciesWidget/lib/conditionLabel.js} +1 -1
  32. package/dist/libs/tesouro-embedded-components-react/{expense-approval-policies-widget/ui/dist/index3.js → expense-management-widget/ui/dist/lib/ExpenseApprovalPoliciesWidget/lib/labels.js} +1 -1
  33. package/dist/libs/tesouro-embedded-components-react/{expense-approval-policies-widget/ui/dist/index2.js → expense-management-widget/ui/dist/lib/ExpenseApprovalPoliciesWidget/lib/types.js} +1 -1
  34. package/dist/libs/tesouro-embedded-components-react/{expense-receipt-match-widget/ui/dist/index6.js → expense-management-widget/ui/dist/lib/ReceiptMatchWidget/lib/MatchConfirmationStep.js} +3 -3
  35. package/dist/libs/tesouro-embedded-components-react/{expense-receipt-match-widget/ui/dist/index3.js → expense-management-widget/ui/dist/lib/ReceiptMatchWidget/lib/ReceiptInboxItem.js} +3 -3
  36. package/dist/libs/tesouro-embedded-components-react/{expense-receipt-match-widget/ui/dist/index4.js → expense-management-widget/ui/dist/lib/ReceiptMatchWidget/lib/ReceiptInboxStep.js} +4 -4
  37. package/dist/libs/tesouro-embedded-components-react/{expense-receipt-match-widget/ui/dist/index7.js → expense-management-widget/ui/dist/lib/ReceiptMatchWidget/lib/ReceiptMatchSidebar.js} +6 -6
  38. package/dist/libs/tesouro-embedded-components-react/{expense-receipt-match-widget/ui/dist/index5.js → expense-management-widget/ui/dist/lib/ReceiptMatchWidget/lib/TransactionsMatchStep.js} +3 -3
  39. package/dist/libs/tesouro-embedded-components-react/{expense-receipt-match-widget/ui/dist/index2.js → expense-management-widget/ui/dist/lib/ReceiptMatchWidget/lib/labels.js} +1 -1
  40. package/dist/libs/tesouro-embedded-components-react/{expense-upload-receipt-widget/ui/dist/index3.js → expense-management-widget/ui/dist/lib/UploadReceiptWidget/UploadReceiptButton.js} +3 -3
  41. package/dist/libs/tesouro-embedded-components-react/{expense-upload-receipt-widget/ui/dist/index4.js → expense-management-widget/ui/dist/lib/UploadReceiptWidget/UploadReceiptModal.js} +3 -3
  42. package/dist/libs/tesouro-embedded-components-react/{expense-upload-receipt-widget/ui/dist/index2.js → expense-management-widget/ui/dist/lib/UploadReceiptWidget/labels.js} +1 -1
  43. package/dist/libs/tesouro-embedded-components-react/settings-widget/feature/dist/index5.js +2 -2
  44. package/dist/libs/tesouro-embedded-components-react/shared/approval-policy/data-access/dist/index.js +2 -2
  45. package/dist/libs/tesouro-embedded-components-react/shared/approval-policy/data-access/dist/lib/approvalPoliciesApi.js +52 -46
  46. package/dist/libs/tesouro-embedded-components-react/shared/approval-policy/data-access/dist/lib/queryKeys.js +6 -3
  47. package/dist/libs/tesouro-embedded-components-react/shared/approval-policy/feature/dist/lib/useApprovalPolicyRules.js +2 -2
  48. package/dist/libs/tesouro-embedded-components-react/shared/feature/dist/lib/analytics/build-info.js +1 -1
  49. package/package.json +1 -1
  50. package/dist/libs/tesouro-embedded-components-react/expense-approval-policies-widget/data-access/dist/index.js +0 -4
  51. package/dist/libs/tesouro-embedded-components-react/expense-approval-policies-widget/data-access/dist/index2.js +0 -11
  52. package/dist/libs/tesouro-embedded-components-react/expense-approval-policies-widget/data-access/dist/index3.js +0 -94
  53. package/dist/libs/tesouro-embedded-components-react/expense-approval-policies-widget/data-access/dist/index4.js +0 -7
  54. package/dist/libs/tesouro-embedded-components-react/expense-approval-policies-widget/feature/dist/index.js +0 -3
  55. package/dist/libs/tesouro-embedded-components-react/expense-approval-policies-widget/feature/dist/lib/analytics/events.js +0 -4
  56. package/dist/libs/tesouro-embedded-components-react/expense-approval-policies-widget/feature/dist/lib/labels.js +0 -22
  57. package/dist/libs/tesouro-embedded-components-react/expense-approval-policies-widget/feature/dist/lib/useApprovalPolicies.js +0 -255
  58. package/dist/libs/tesouro-embedded-components-react/expense-approval-policies-widget/ui/dist/index.js +0 -8
  59. package/dist/libs/tesouro-embedded-components-react/expense-receipt-match-widget/feature/dist/index.js +0 -2
  60. package/dist/libs/tesouro-embedded-components-react/expense-receipt-match-widget/ui/dist/index.js +0 -7
  61. package/dist/libs/tesouro-embedded-components-react/expense-upload-receipt-widget/feature/dist/index.js +0 -2
  62. package/dist/libs/tesouro-embedded-components-react/expense-upload-receipt-widget/ui/dist/index.js +0 -4
  63. /package/dist/libs/tesouro-embedded-components-react/{expense-receipt-match-widget → expense-management-widget}/data-access/dist/index.js +0 -0
@@ -1,51 +1,256 @@
1
- "use client";
2
- "use client";
3
- "use client";
4
- "use client";
5
- import { useAnalyticsTrack as e } from "../../../shared/feature/dist/lib/analytics/hooks.js";
6
- import { WidgetProvider as t } from "../../../shared/feature/dist/lib/WidgetProvider/WidgetProvider.js";
7
- import "../../../shared/feature/dist/index.js";
8
- import { ExpenseManagementWidgetAnalyticsEvent as n, WIDGET_NAME as r } from "./index2.js";
9
- import { ExpenseManagementWidgetUi as i } from "../../ui/dist/lib/ExpenseManagementWidgetUi/ExpenseManagementWidgetUi.js";
1
+ import { useEmbedApi as e } from "../../../shared/data-access/dist/lib/EmbedApiContext.js";
2
+ import "../../../shared/data-access/dist/index.js";
3
+ import { ApprovalPolicyObjectType as t } from "../../../shared/approval-policy/data-access/dist/lib/queryKeys.js";
4
+ import { useDeleteApprovalPoliciesIdMutation as n, useGetApprovalPoliciesQuery as r, usePatchApprovalPoliciesIdMutation as i, usePostApprovalPoliciesMutation as a } from "../../../shared/approval-policy/data-access/dist/lib/approvalPoliciesApi.js";
5
+ import "../../../shared/approval-policy/data-access/dist/index.js";
6
+ import { AmountConditionType as o, ApprovalOutcomeType as s } from "../../ui/dist/lib/ExpenseApprovalPoliciesWidget/lib/types.js";
10
7
  import "../../ui/dist/index.js";
11
- import { ExpenseApprovalPoliciesWidget as a } from "../../../expense-approval-policies-widget/feature/dist/lib/ExpenseApprovalPoliciesWidgetFeature.js";
12
- import "../../../expense-approval-policies-widget/feature/dist/index.js";
13
- import { ExpenseRequirementsWidget as o } from "../../../expense-requirements-widget/feature/dist/lib/ExpenseRequirementsWidget.js";
14
- import "../../../expense-requirements-widget/feature/dist/index.js";
15
- import { UploadReceiptWidget as s } from "../../../expense-upload-receipt-widget/feature/dist/lib/UploadReceiptWidget.js";
16
- import "../../../expense-upload-receipt-widget/feature/dist/index.js";
17
- import { useEffect as c } from "react";
18
- import { jsx as l } from "react/jsx-runtime";
8
+ import { useCallback as c, useEffect as l, useRef as u, useState as d } from "react";
19
9
  //#region ../../libs/tesouro-embedded-components-react/expense-management-widget/feature/dist/index3.js
20
- function u({ labels: t, receiptUpload: r, receiptsContent: u, matchingContent: d, policiesContent: f, requirementsContent: p }) {
21
- let m = e();
22
- return c(() => {
23
- m(n.Mounted);
24
- }, [m]), /* @__PURE__ */ l(i, {
25
- labels: t,
26
- receiptsContent: u ?? (r ? /* @__PURE__ */ l(s, { ...r }) : null),
27
- matchingContent: d,
28
- policiesContent: f ?? /* @__PURE__ */ l(a, {}),
29
- requirementsContent: p ?? /* @__PURE__ */ l(o, {})
30
- });
10
+ var f = t.Transaction, p = "{event_name == 'submitted_for_approval'}";
11
+ function m(e, t, n) {
12
+ switch (e) {
13
+ case o.All: return { all: [p] };
14
+ case o.LessThan: return { all: [p, {
15
+ operator: "<",
16
+ left_operand: { name: "transaction.amount" },
17
+ right_operand: (n ?? 0) * 100
18
+ }] };
19
+ case o.GreaterThanOrEqual: return { all: [p, {
20
+ operator: ">=",
21
+ left_operand: { name: "transaction.amount" },
22
+ right_operand: (t ?? 0) * 100
23
+ }] };
24
+ case o.InRange: return { all: [
25
+ p,
26
+ {
27
+ operator: ">=",
28
+ left_operand: { name: "transaction.amount" },
29
+ right_operand: (t ?? 0) * 100
30
+ },
31
+ {
32
+ operator: "<",
33
+ left_operand: { name: "transaction.amount" },
34
+ right_operand: (n ?? 0) * 100
35
+ }
36
+ ] };
37
+ }
31
38
  }
32
- function d({ baseUrl: e, widgetToken: n, organizationId: i, configClient: a, gatewayRouting: o, linkComponent: s, implementation: c, uiFramework: d, errorFallback: f, onError: p, analytics: m, disclosuresAcceptance: h, ...g }) {
33
- return /* @__PURE__ */ l(t, {
34
- widgetName: r,
35
- baseUrl: e,
36
- widgetToken: n,
37
- organizationId: i,
38
- configClient: a,
39
- gatewayRouting: o,
40
- linkComponent: s,
41
- implementation: c,
42
- uiFramework: d,
43
- errorFallback: f,
44
- onError: p,
45
- analytics: m,
46
- disclosuresAcceptance: h,
47
- children: /* @__PURE__ */ l(u, { ...g })
48
- });
39
+ function h(e, t) {
40
+ let n = ["{Transactions.approve(transaction.id)}"], r = ["{Transactions.reject(transaction.id)}"];
41
+ if (e === s.AutoApprove) return ["{Transactions.approve(transaction.id)}"];
42
+ let i = t.map((e) => e.id), a = i.includes("reporting_manager"), o = i.filter((e) => e !== "reporting_manager");
43
+ if (a) {
44
+ let e = [{
45
+ call: "ApprovalRequests.request_approval_from_reporting_manager",
46
+ params: { required_approval_count: 1 }
47
+ }];
48
+ return o.length > 0 && e.push({
49
+ call: "ApprovalRequests.request_approval_by_role",
50
+ params: {
51
+ role_ids: o,
52
+ required_approval_count: 1
53
+ }
54
+ }), [{
55
+ if: { any: e },
56
+ then: n,
57
+ else: r
58
+ }];
59
+ }
60
+ return [{
61
+ if: { all: [{
62
+ call: "ApprovalRequests.request_approval_by_role",
63
+ params: {
64
+ role_ids: o,
65
+ required_approval_count: 1
66
+ }
67
+ }] },
68
+ then: n,
69
+ else: r
70
+ }];
71
+ }
72
+ function g(e) {
73
+ switch (e.conditionType) {
74
+ case o.All: return "All expenses";
75
+ case o.LessThan: return `Less than $${e.maxAmount ?? 0}`;
76
+ case o.GreaterThanOrEqual: return `$${e.minAmount ?? 0} or more`;
77
+ case o.InRange: return `$${e.minAmount ?? 0}–$${e.maxAmount ?? 0}`;
78
+ }
79
+ }
80
+ function _(e) {
81
+ if (e === !0 || e == null) return { conditionType: o.All };
82
+ if (typeof e == "object" && !Array.isArray(e) && "all" in e) {
83
+ let t = e.all, n, r;
84
+ for (let e of t) {
85
+ if (typeof e != "object" || !e || !("operator" in e)) continue;
86
+ let t = e;
87
+ if (t.left_operand?.name !== "transaction.amount") continue;
88
+ let i = Number(t.right_operand) / 100;
89
+ t.operator === ">=" && (n = i), t.operator === "<" && (r = i), t.operator === "<=" && (r = i);
90
+ }
91
+ return n !== void 0 && r !== void 0 ? {
92
+ conditionType: o.InRange,
93
+ minAmount: n,
94
+ maxAmount: r
95
+ } : n === void 0 ? r === void 0 ? { conditionType: o.All } : {
96
+ conditionType: o.LessThan,
97
+ maxAmount: r
98
+ } : {
99
+ conditionType: o.GreaterThanOrEqual,
100
+ minAmount: n
101
+ };
102
+ }
103
+ if (typeof e != "string") return { conditionType: o.All };
104
+ let t = e.replace(/^\{(.*)\}$/, "$1").trim().replace(/^event_name\s*==\s*["'][^'"]*["']\s*&&\s*/, "").trim(), n = t.match(/(?:transaction\.)?amount\s*>=\s*([\d.]+)\s*&&\s*(?:transaction\.)?amount\s*<\s*([\d.]+)/);
105
+ if (n) return {
106
+ conditionType: o.InRange,
107
+ minAmount: Number(n[1]),
108
+ maxAmount: Number(n[2])
109
+ };
110
+ let r = t.match(/^(?:transaction\.)?amount\s*<\s*([\d.]+)$/);
111
+ if (r) return {
112
+ conditionType: o.LessThan,
113
+ maxAmount: Number(r[1])
114
+ };
115
+ let i = t.match(/^(?:transaction\.)?amount\s*>=\s*([\d.]+)$/);
116
+ return i ? {
117
+ conditionType: o.GreaterThanOrEqual,
118
+ minAmount: Number(i[1])
119
+ } : { conditionType: o.All };
120
+ }
121
+ function v(e, t = {}) {
122
+ let n = (e) => e.filter((e) => e === "reporting_manager" || e in t).map((e) => ({
123
+ id: e,
124
+ label: t[e] ?? e
125
+ })), r = e[0];
126
+ if (typeof r == "object" && r && !Array.isArray(r) && "if" in r) {
127
+ let e = r.if, t = Array.isArray(e?.all) ? e.all : [], i = Array.isArray(e?.any) ? e.any : [];
128
+ if (t.length === 0 && i.length === 0) return {
129
+ outcome: s.AutoApprove,
130
+ approvers: []
131
+ };
132
+ let a = /* @__PURE__ */ new Set();
133
+ for (let e of i) if (typeof e == "object" && e && "call" in e) {
134
+ let t = String(e.call ?? "");
135
+ if (t.includes("request_approval_from_reporting_manager") && a.add("reporting_manager"), t.includes("request_approval_by_role")) {
136
+ let t = e.params?.role_ids;
137
+ Array.isArray(t) && t.forEach((e) => a.add(String(e)));
138
+ }
139
+ }
140
+ if (a.size > 0) return {
141
+ outcome: s.RequireApproval,
142
+ approvers: n([...a])
143
+ };
144
+ for (let e of t) if (typeof e == "object" && e && "call" in e) {
145
+ let t = e, r = String(t.call ?? "");
146
+ if (r.includes("request_approval_from_reporting_manager")) return {
147
+ outcome: s.RequireApproval,
148
+ approvers: n(["reporting_manager"])
149
+ };
150
+ if (r.includes("request_approval_by_role")) {
151
+ let e = t.params?.role_ids;
152
+ return {
153
+ outcome: s.RequireApproval,
154
+ approvers: n(Array.isArray(e) ? e.map((e) => String(e)) : [])
155
+ };
156
+ }
157
+ }
158
+ return {
159
+ outcome: s.RequireApproval,
160
+ approvers: []
161
+ };
162
+ }
163
+ let i = null, a = [];
164
+ if (typeof r == "string") i = r;
165
+ else if (typeof r == "object" && r && !Array.isArray(r)) {
166
+ let e = r;
167
+ i = String(e.call ?? e.event_name ?? "");
168
+ let t = e.params;
169
+ if (typeof t == "object" && t) {
170
+ let e = t;
171
+ "role_ids" in e && Array.isArray(e.role_ids) && (a = e.role_ids.map((e) => String(e)));
172
+ }
173
+ }
174
+ return !i || i.includes("Transactions.approve") ? {
175
+ outcome: s.AutoApprove,
176
+ approvers: []
177
+ } : i.includes("request_approval_from_reporting_manager") ? {
178
+ outcome: s.RequireApproval,
179
+ approvers: n(["reporting_manager"])
180
+ } : i.includes("request_approval_by_role") ? {
181
+ outcome: s.RequireApproval,
182
+ approvers: n(a)
183
+ } : {
184
+ outcome: s.RequireApproval,
185
+ approvers: []
186
+ };
187
+ }
188
+ function y(e, t = {}) {
189
+ return {
190
+ id: e.id,
191
+ ..._(e.trigger),
192
+ ...v(e.script, t)
193
+ };
194
+ }
195
+ function b(t = {}) {
196
+ let { widgetToken: o, organizationId: s } = e(), p = !!(o && s), [_, v] = d("idle"), b = u(null), x = r({ objectType: f }), S = a({ objectType: f }), C = i({ objectType: f }), w = n({ objectType: f }), T = (x.data?.data.map((e) => y(e, t)) ?? []).sort((e, t) => (e.minAmount ?? 0) - (t.minAmount ?? 0));
197
+ l(() => () => {
198
+ b.current && clearTimeout(b.current);
199
+ }, []);
200
+ let E = () => {
201
+ b.current = setTimeout(() => v("idle"), 3e3);
202
+ }, D = c(async (e) => {
203
+ if (!p) return !1;
204
+ b.current && clearTimeout(b.current), v("saving");
205
+ let t = x.data?.data.map((e) => e.priority ?? 0) ?? [], n = Math.max(0, ...t) + 1;
206
+ try {
207
+ return await S.mutateAsync({ body: {
208
+ object_type: "transaction",
209
+ name: g(e),
210
+ trigger: m(e.conditionType, e.minAmount, e.maxAmount),
211
+ script: h(e.outcome, e.approvers),
212
+ priority: n
213
+ } }), v("success"), E(), !0;
214
+ } catch {
215
+ return v("error"), !1;
216
+ }
217
+ }, [
218
+ p,
219
+ S.mutateAsync,
220
+ x.data
221
+ ]), O = c(async (e, t) => {
222
+ if (!p) return !1;
223
+ b.current && clearTimeout(b.current), v("saving");
224
+ try {
225
+ return await C.mutateAsync({
226
+ path: { approval_policy_id: e },
227
+ body: {
228
+ name: g(t),
229
+ trigger: m(t.conditionType, t.minAmount, t.maxAmount),
230
+ script: h(t.outcome, t.approvers)
231
+ }
232
+ }), v("success"), E(), !0;
233
+ } catch {
234
+ return v("error"), !1;
235
+ }
236
+ }, [p, C.mutateAsync]), k = c(async (e) => {
237
+ if (p) {
238
+ b.current && clearTimeout(b.current), v("saving");
239
+ try {
240
+ await w.mutateAsync({ path: { approval_policy_id: e } }), v("success"), E();
241
+ } catch {
242
+ v("error");
243
+ }
244
+ }
245
+ }, [p, w.mutateAsync]);
246
+ return {
247
+ rules: T,
248
+ isLoading: x.isFetching,
249
+ saveStatus: _,
250
+ createRule: D,
251
+ updateRule: O,
252
+ deleteRule: k
253
+ };
49
254
  }
50
255
  //#endregion
51
- export { d as ExpenseManagementWidget, d as default };
256
+ export { h as buildScript, m as buildTrigger, y as parsePolicy, b as useApprovalPolicies };
@@ -1 +1,22 @@
1
- import "./index3.js";
1
+ //#region ../../libs/tesouro-embedded-components-react/expense-management-widget/feature/dist/index4.js
2
+ var e = {
3
+ AdminLabel: "Company admin",
4
+ AdminSublabel: "Any company admin can approve",
5
+ ReportingManagerLabel: "Reporting Managers",
6
+ ReportingManagerSublabel: "Assigned reporting managers can approve",
7
+ CfoLabel: "Finance admin",
8
+ CfoSublabel: "Any finance admin can approve"
9
+ }, t = {
10
+ InvalidMinAmount: "Enter a valid minimum amount",
11
+ InvalidMaxAmount: "Enter a valid maximum amount",
12
+ MaxLessThanOrEqualToMin: "Maximum amount can not be less than or equal to the minimum amount",
13
+ ApproversRequired: "At least one approver is required",
14
+ ConflictsWithAnotherRule: "This conflicts with another rule"
15
+ }, n = {
16
+ MissingRolePermissionTitle: "Approval policies unavailable",
17
+ MissingRolePermissionDescription: "Your access token is missing the permissions required to manage approval policies. Contact your administrator to update your access.",
18
+ RolesUnavailableTitle: "Roles unavailable",
19
+ RolesUnavailableDescription: "Approver roles could not be loaded. Refresh the page to try again."
20
+ };
21
+ //#endregion
22
+ export { e as ApproverOptionLabels, n as PermissionErrorLabels, t as ValidationErrorLabels };
@@ -2,28 +2,27 @@
2
2
  "use client";
3
3
  "use client";
4
4
  "use client";
5
- import { toast as e } from "../../../../../../packages/shared-ui-shadcn/dist/index.js";
6
- import { Scope as t } from "../../../../shared/data-access/dist/lib/scopes.js";
7
- import { useAllOrganizationRolesQuery as n } from "../../../../shared/data-access/dist/lib/role/useAllOrganizationRolesQuery.js";
8
- import "../../../../shared/data-access/dist/index.js";
9
- import { EmbeddedToaster as r } from "../../../../shared/ui/dist/lib/EmbeddedToaster.js";
10
- import { ErrorState as i } from "../../../../shared/ui/dist/lib/ErrorState/ErrorState.js";
11
- import "../../../../shared/ui/dist/index.js";
12
- import { useAnalyticsTrack as a } from "../../../../shared/feature/dist/lib/analytics/hooks.js";
13
- import { WidgetProvider as o } from "../../../../shared/feature/dist/lib/WidgetProvider/WidgetProvider.js";
14
- import { useWidgetConfig as s } from "../../../../shared/feature/dist/lib/WidgetProvider/hooks.js";
15
- import "../../../../shared/feature/dist/index.js";
16
- import { ApproverOptionLabels as c, PermissionErrorLabels as l, ValidationErrorLabels as u } from "./labels.js";
17
- import { ExpenseApprovalPoliciesAnalyticsEvent as d, WIDGET_NAME as f } from "./analytics/events.js";
18
- import { AmountConditionType as p, ApprovalOutcomeType as m } from "../../../ui/dist/index2.js";
19
- import { ApprovalRuleToastLabels as h } from "../../../ui/dist/index3.js";
20
- import { ExpenseApprovalsPage as g } from "../../../ui/dist/index8.js";
21
- import "../../../ui/dist/index.js";
22
- import "../../../data-access/dist/index.js";
23
- import { useApprovalPolicies as _ } from "./useApprovalPolicies.js";
5
+ import { toast as e } from "../../../../../packages/shared-ui-shadcn/dist/index.js";
6
+ import { Scope as t } from "../../../shared/data-access/dist/lib/scopes.js";
7
+ import { useAllOrganizationRolesQuery as n } from "../../../shared/data-access/dist/lib/role/useAllOrganizationRolesQuery.js";
8
+ import "../../../shared/data-access/dist/index.js";
9
+ import { EmbeddedToaster as r } from "../../../shared/ui/dist/lib/EmbeddedToaster.js";
10
+ import { ErrorState as i } from "../../../shared/ui/dist/lib/ErrorState/ErrorState.js";
11
+ import "../../../shared/ui/dist/index.js";
12
+ import { useAnalyticsTrack as a } from "../../../shared/feature/dist/lib/analytics/hooks.js";
13
+ import { WidgetProvider as o } from "../../../shared/feature/dist/lib/WidgetProvider/WidgetProvider.js";
14
+ import { useWidgetConfig as s } from "../../../shared/feature/dist/lib/WidgetProvider/hooks.js";
15
+ import "../../../shared/feature/dist/index.js";
16
+ import { ApproverOptionLabels as c, PermissionErrorLabels as l, ValidationErrorLabels as u } from "./index4.js";
17
+ import { ExpenseApprovalPoliciesAnalyticsEvent as d, WIDGET_NAME as f } from "./index2.js";
18
+ import { AmountConditionType as p, ApprovalOutcomeType as m } from "../../ui/dist/lib/ExpenseApprovalPoliciesWidget/lib/types.js";
19
+ import { ApprovalRuleToastLabels as h } from "../../ui/dist/lib/ExpenseApprovalPoliciesWidget/lib/labels.js";
20
+ import { ExpenseApprovalsPage as g } from "../../ui/dist/lib/ExpenseApprovalPoliciesWidget/lib/ExpenseApprovalsPage.js";
21
+ import "../../ui/dist/index.js";
22
+ import { useApprovalPolicies as _ } from "./index3.js";
24
23
  import { useEffect as v, useMemo as y, useState as b } from "react";
25
24
  import { Fragment as x, jsx as S, jsxs as C } from "react/jsx-runtime";
26
- //#region ../../libs/tesouro-embedded-components-react/expense-approval-policies-widget/feature/dist/lib/ExpenseApprovalPoliciesWidgetFeature.js
25
+ //#region ../../libs/tesouro-embedded-components-react/expense-management-widget/feature/dist/index5.js
27
26
  var w = {
28
27
  minAmount: "",
29
28
  maxAmount: "",
@@ -2,16 +2,16 @@
2
2
  "use client";
3
3
  "use client";
4
4
  "use client";
5
- import { toast as e } from "../../../../../../packages/shared-ui-shadcn/dist/index.js";
6
- import { EmbeddedToaster as t } from "../../../../shared/ui/dist/lib/EmbeddedToaster.js";
7
- import "../../../../shared/ui/dist/index.js";
8
- import { UploadReceiptToastLabels as n } from "../../../ui/dist/index2.js";
9
- import { UploadReceiptButton as r } from "../../../ui/dist/index3.js";
10
- import { UploadReceiptModal as i } from "../../../ui/dist/index4.js";
11
- import "../../../ui/dist/index.js";
5
+ import { toast as e } from "../../../../../packages/shared-ui-shadcn/dist/index.js";
6
+ import { EmbeddedToaster as t } from "../../../shared/ui/dist/lib/EmbeddedToaster.js";
7
+ import "../../../shared/ui/dist/index.js";
8
+ import { UploadReceiptToastLabels as n } from "../../ui/dist/lib/UploadReceiptWidget/labels.js";
9
+ import { UploadReceiptButton as r } from "../../ui/dist/lib/UploadReceiptWidget/UploadReceiptButton.js";
10
+ import { UploadReceiptModal as i } from "../../ui/dist/lib/UploadReceiptWidget/UploadReceiptModal.js";
11
+ import "../../ui/dist/index.js";
12
12
  import { useEffect as a, useRef as o, useState as s } from "react";
13
13
  import { jsx as c, jsxs as l } from "react/jsx-runtime";
14
- //#region ../../libs/tesouro-embedded-components-react/expense-upload-receipt-widget/feature/dist/lib/UploadReceiptWidget.js
14
+ //#region ../../libs/tesouro-embedded-components-react/expense-management-widget/feature/dist/index6.js
15
15
  var u = 3e3, d = 5e3, f = 10;
16
16
  function p(e, t) {
17
17
  return e ? e.stillProcessing > 0 ? n.MatchingUnfinished(e.stillProcessing) : e.total === 0 ? n.UploadedAll(t) : e.matched === e.total ? n.MatchedAll(e.matched) : n.MatchedPartial(e.matched, e.total) : n.UploadedAll(t);
@@ -0,0 +1,4 @@
1
+ //#region ../../libs/tesouro-embedded-components-react/expense-management-widget/feature/dist/index7.js
2
+ var e = { Mounted: "expense_management_widget.mounted" }, t = "expense_management_widget";
3
+ //#endregion
4
+ export { e as ExpenseManagementWidgetAnalyticsEvent, t as WIDGET_NAME };
@@ -0,0 +1,49 @@
1
+ "use client";
2
+ "use client";
3
+ "use client";
4
+ "use client";
5
+ import { useAnalyticsTrack as e } from "../../../shared/feature/dist/lib/analytics/hooks.js";
6
+ import { WidgetProvider as t } from "../../../shared/feature/dist/lib/WidgetProvider/WidgetProvider.js";
7
+ import "../../../shared/feature/dist/index.js";
8
+ import { ExpenseManagementWidgetUi as n } from "../../ui/dist/lib/ExpenseManagementWidgetUi/ExpenseManagementWidgetUi.js";
9
+ import "../../ui/dist/index.js";
10
+ import { ExpenseApprovalPoliciesWidget as r } from "./index5.js";
11
+ import { UploadReceiptWidget as i } from "./index6.js";
12
+ import { ExpenseManagementWidgetAnalyticsEvent as a, WIDGET_NAME as o } from "./index7.js";
13
+ import { ExpenseRequirementsWidget as s } from "../../../expense-requirements-widget/feature/dist/lib/ExpenseRequirementsWidget.js";
14
+ import "../../../expense-requirements-widget/feature/dist/index.js";
15
+ import { useEffect as c } from "react";
16
+ import { jsx as l } from "react/jsx-runtime";
17
+ //#region ../../libs/tesouro-embedded-components-react/expense-management-widget/feature/dist/index8.js
18
+ function u({ labels: t, receiptUpload: o, receiptsContent: u, matchingContent: d, policiesContent: f, requirementsContent: p }) {
19
+ let m = e();
20
+ return c(() => {
21
+ m(a.Mounted);
22
+ }, [m]), /* @__PURE__ */ l(n, {
23
+ labels: t,
24
+ receiptsContent: u ?? (o ? /* @__PURE__ */ l(i, { ...o }) : null),
25
+ matchingContent: d,
26
+ policiesContent: f ?? /* @__PURE__ */ l(r, {}),
27
+ requirementsContent: p ?? /* @__PURE__ */ l(s, {})
28
+ });
29
+ }
30
+ function d({ baseUrl: e, widgetToken: n, organizationId: r, configClient: i, gatewayRouting: a, linkComponent: s, implementation: c, uiFramework: d, errorFallback: f, onError: p, analytics: m, disclosuresAcceptance: h, ...g }) {
31
+ return /* @__PURE__ */ l(t, {
32
+ widgetName: o,
33
+ baseUrl: e,
34
+ widgetToken: n,
35
+ organizationId: r,
36
+ configClient: i,
37
+ gatewayRouting: a,
38
+ linkComponent: s,
39
+ implementation: c,
40
+ uiFramework: d,
41
+ errorFallback: f,
42
+ onError: p,
43
+ analytics: m,
44
+ disclosuresAcceptance: h,
45
+ children: /* @__PURE__ */ l(u, { ...g })
46
+ });
47
+ }
48
+ //#endregion
49
+ export { d as ExpenseManagementWidget, d as default };
@@ -1,4 +1,20 @@
1
1
  import "./lib/ExpenseManagementWidgetUi/labels.js";
2
2
  import { ExpenseManagementWidgetUi as e } from "./lib/ExpenseManagementWidgetUi/ExpenseManagementWidgetUi.js";
3
3
  import "./lib/ExpenseManagementWidgetUi/index.js";
4
- export { e as ExpenseManagementWidgetUi };
4
+ import { UploadReceiptToastLabels as t } from "./lib/UploadReceiptWidget/labels.js";
5
+ import { UploadReceiptButton as n } from "./lib/UploadReceiptWidget/UploadReceiptButton.js";
6
+ import { UploadReceiptModal as r } from "./lib/UploadReceiptWidget/UploadReceiptModal.js";
7
+ import { ReceiptMatchLabels as i } from "./lib/ReceiptMatchWidget/lib/labels.js";
8
+ import "./lib/ReceiptMatchWidget/lib/ReceiptInboxItem.js";
9
+ import "./lib/ReceiptMatchWidget/lib/ReceiptInboxStep.js";
10
+ import "./lib/ReceiptMatchWidget/lib/TransactionsMatchStep.js";
11
+ import "./lib/ReceiptMatchWidget/lib/MatchConfirmationStep.js";
12
+ import { ReceiptMatchSidebar as a } from "./lib/ReceiptMatchWidget/lib/ReceiptMatchSidebar.js";
13
+ import { AmountConditionType as o, ApprovalOutcomeType as s } from "./lib/ExpenseApprovalPoliciesWidget/lib/types.js";
14
+ import { ApprovalRuleToastLabels as c } from "./lib/ExpenseApprovalPoliciesWidget/lib/labels.js";
15
+ import "./lib/ExpenseApprovalPoliciesWidget/lib/conditionLabel.js";
16
+ import "./lib/ExpenseApprovalPoliciesWidget/lib/EmptyApprovalRules.js";
17
+ import "./lib/ExpenseApprovalPoliciesWidget/lib/ApprovalRuleCard.js";
18
+ import "./lib/ExpenseApprovalPoliciesWidget/lib/ApprovalRuleForm.js";
19
+ import { ExpenseApprovalsPage as l } from "./lib/ExpenseApprovalPoliciesWidget/lib/ExpenseApprovalsPage.js";
20
+ export { o as AmountConditionType, s as ApprovalOutcomeType, c as ApprovalRuleToastLabels, l as ExpenseApprovalsPage, e as ExpenseManagementWidgetUi, i as ReceiptMatchLabels, a as ReceiptMatchSidebar, n as UploadReceiptButton, r as UploadReceiptModal, t as UploadReceiptToastLabels };
@@ -1,10 +1,10 @@
1
- import { Badge as e, Button as t } from "../../../../../packages/shared-ui-shadcn/dist/index.js";
2
- import { AmountConditionType as n, ApprovalOutcomeType as r } from "./index2.js";
3
- import { ApprovalRuleCardLabels as i } from "./index3.js";
4
- import { formatAmount as a } from "./index4.js";
1
+ import { Badge as e, Button as t } from "../../../../../../../../packages/shared-ui-shadcn/dist/index.js";
2
+ import { AmountConditionType as n, ApprovalOutcomeType as r } from "./types.js";
3
+ import { ApprovalRuleCardLabels as i } from "./labels.js";
4
+ import { formatAmount as a } from "./conditionLabel.js";
5
5
  import { Fragment as o, jsx as s, jsxs as c } from "react/jsx-runtime";
6
6
  import { RefreshCw as l, SquarePen as u, Trash2 as d } from "lucide-react";
7
- //#region ../../libs/tesouro-embedded-components-react/expense-approval-policies-widget/ui/dist/index6.js
7
+ //#region ../../libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/lib/ExpenseApprovalPoliciesWidget/lib/ApprovalRuleCard.js
8
8
  function f({ conditionType: e, minAmount: t, maxAmount: r }) {
9
9
  let i = (e) => /* @__PURE__ */ s("strong", { children: a(e) });
10
10
  switch (e) {
@@ -1,10 +1,10 @@
1
- import { Button as e, Combobox as t, Input as n, Tooltip as r, TooltipContent as i, TooltipProvider as a, TooltipTrigger as o, Typography as s } from "../../../../../packages/shared-ui-shadcn/dist/index.js";
2
- import { ApprovalOutcomeType as c } from "./index2.js";
3
- import { ApprovalRuleFormLabels as l } from "./index3.js";
1
+ import { Button as e, Combobox as t, Input as n, Tooltip as r, TooltipContent as i, TooltipProvider as a, TooltipTrigger as o, Typography as s } from "../../../../../../../../packages/shared-ui-shadcn/dist/index.js";
2
+ import { ApprovalOutcomeType as c } from "./types.js";
3
+ import { ApprovalRuleFormLabels as l } from "./labels.js";
4
4
  import { useId as u, useState as d } from "react";
5
5
  import { jsx as f, jsxs as p } from "react/jsx-runtime";
6
6
  import { CircleAlert as m, FilePenLine as h, RefreshCw as g, Trash2 as _ } from "lucide-react";
7
- //#region ../../libs/tesouro-embedded-components-react/expense-approval-policies-widget/ui/dist/index7.js
7
+ //#region ../../libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/lib/ExpenseApprovalPoliciesWidget/lib/ApprovalRuleForm.js
8
8
  function v({ value: e, onChange: t, onBlur: a, placeholder: s, error: c, disabled: l, testId: u }) {
9
9
  return /* @__PURE__ */ p("div", {
10
10
  className: "ttw:relative ttw:w-39",
@@ -1,8 +1,8 @@
1
- import { Button as e, Typography as t } from "../../../../../packages/shared-ui-shadcn/dist/index.js";
2
- import { EmptyApprovalRulesLabels as n } from "./index3.js";
1
+ import { Button as e, Typography as t } from "../../../../../../../../packages/shared-ui-shadcn/dist/index.js";
2
+ import { EmptyApprovalRulesLabels as n } from "./labels.js";
3
3
  import { jsx as r, jsxs as i } from "react/jsx-runtime";
4
4
  import { PlusIcon as a, ShieldCheck as o } from "lucide-react";
5
- //#region ../../libs/tesouro-embedded-components-react/expense-approval-policies-widget/ui/dist/index5.js
5
+ //#region ../../libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/lib/ExpenseApprovalPoliciesWidget/lib/EmptyApprovalRules.js
6
6
  var s = ({ onAddRule: s, onLearnMore: c }) => /* @__PURE__ */ i("div", {
7
7
  className: "ttw:flex ttw:flex-col ttw:items-center ttw:py-12 ttw:gap-4 ttw:w-full ttw:max-w-[600px] ttw:mx-auto",
8
8
  children: [
@@ -1,12 +1,12 @@
1
- import { Button as e, Skeleton as t } from "../../../../../packages/shared-ui-shadcn/dist/index.js";
2
- import { ExpenseApprovalsPageLabels as n, GapCalloutLabels as r } from "./index3.js";
3
- import { formatAmount as i } from "./index4.js";
4
- import { EmptyApprovalRules as a } from "./index5.js";
5
- import { ApprovalRuleCard as o } from "./index6.js";
6
- import { ApprovalRuleForm as s } from "./index7.js";
1
+ import { Button as e, Skeleton as t } from "../../../../../../../../packages/shared-ui-shadcn/dist/index.js";
2
+ import { ExpenseApprovalsPageLabels as n, GapCalloutLabels as r } from "./labels.js";
3
+ import { formatAmount as i } from "./conditionLabel.js";
4
+ import { EmptyApprovalRules as a } from "./EmptyApprovalRules.js";
5
+ import { ApprovalRuleCard as o } from "./ApprovalRuleCard.js";
6
+ import { ApprovalRuleForm as s } from "./ApprovalRuleForm.js";
7
7
  import { Fragment as c, jsx as l, jsxs as u } from "react/jsx-runtime";
8
8
  import { CircleCheck as d, Info as f, PlusIcon as p } from "lucide-react";
9
- //#region ../../libs/tesouro-embedded-components-react/expense-approval-policies-widget/ui/dist/index8.js
9
+ //#region ../../libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/lib/ExpenseApprovalPoliciesWidget/lib/ExpenseApprovalsPage.js
10
10
  function m(e) {
11
11
  return e.to === null ? `${r.Above} ${i(e.from)}` : `${i(e.from)} ${r.RangeSeparator} ${i(e.to)}`;
12
12
  }
@@ -1,4 +1,4 @@
1
- //#region ../../libs/tesouro-embedded-components-react/expense-approval-policies-widget/ui/dist/index4.js
1
+ //#region ../../libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/lib/ExpenseApprovalPoliciesWidget/lib/conditionLabel.js
2
2
  function e(e) {
3
3
  return `$${e.toLocaleString(void 0, {
4
4
  minimumFractionDigits: 0,
@@ -1,4 +1,4 @@
1
- //#region ../../libs/tesouro-embedded-components-react/expense-approval-policies-widget/ui/dist/index3.js
1
+ //#region ../../libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/lib/ExpenseApprovalPoliciesWidget/lib/labels.js
2
2
  var e = {
3
3
  Title: "Expense approvals",
4
4
  Description: "Configure who needs to approve expenses and under what conditions. A company admin can always approve a transaction even if the manager hasn't yet got to it.",
@@ -1,4 +1,4 @@
1
- //#region ../../libs/tesouro-embedded-components-react/expense-approval-policies-widget/ui/dist/index2.js
1
+ //#region ../../libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/lib/ExpenseApprovalPoliciesWidget/lib/types.js
2
2
  var e = {
3
3
  All: "all",
4
4
  LessThan: "less_than",
@@ -2,11 +2,11 @@
2
2
  "use client";
3
3
  "use client";
4
4
  "use client";
5
- import { Button as e } from "../../../../../packages/shared-ui-shadcn/dist/index.js";
6
- import { ReceiptMatchLabels as t } from "./index2.js";
5
+ import { Button as e } from "../../../../../../../../packages/shared-ui-shadcn/dist/index.js";
6
+ import { ReceiptMatchLabels as t } from "./labels.js";
7
7
  import { Fragment as n, jsx as r, jsxs as i } from "react/jsx-runtime";
8
8
  import { Check as a } from "lucide-react";
9
- //#region ../../libs/tesouro-embedded-components-react/expense-receipt-match-widget/ui/dist/index6.js
9
+ //#region ../../libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/lib/ReceiptMatchWidget/lib/MatchConfirmationStep.js
10
10
  function o({ matchedTransactions: o, primaryLabel: c, onPrimary: l }) {
11
11
  let u = o ?? [], d = u.length === 1, f = u[0];
12
12
  return /* @__PURE__ */ i("div", {
@@ -2,11 +2,11 @@
2
2
  "use client";
3
3
  "use client";
4
4
  "use client";
5
- import { Button as e, DropdownMenu as t, DropdownMenuContent as n, DropdownMenuItem as r, DropdownMenuTrigger as i } from "../../../../../packages/shared-ui-shadcn/dist/index.js";
6
- import { ReceiptMatchLabels as a } from "./index2.js";
5
+ import { Button as e, DropdownMenu as t, DropdownMenuContent as n, DropdownMenuItem as r, DropdownMenuTrigger as i } from "../../../../../../../../packages/shared-ui-shadcn/dist/index.js";
6
+ import { ReceiptMatchLabels as a } from "./labels.js";
7
7
  import { jsx as o, jsxs as s } from "react/jsx-runtime";
8
8
  import { FileText as c, ImageOff as l, MoreVertical as u, Search as d, Trash2 as f } from "lucide-react";
9
- //#region ../../libs/tesouro-embedded-components-react/expense-receipt-match-widget/ui/dist/index3.js
9
+ //#region ../../libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/lib/ReceiptMatchWidget/lib/ReceiptInboxItem.js
10
10
  function p(e) {
11
11
  if (!e) return "missing";
12
12
  let t = e.split(/[?#]/)[0].toLowerCase();