@reeboot/strapi-payment-plugin 0.0.0 → 0.0.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 (81) hide show
  1. package/README.md +398 -66
  2. package/dist/_chunks/Analytics-C2GKvPDX.js +355 -0
  3. package/dist/_chunks/Analytics-Chydh3dg.mjs +355 -0
  4. package/dist/_chunks/App-BCbEuN6h.mjs +68 -0
  5. package/dist/_chunks/App-E2k2mo5p.js +70 -0
  6. package/dist/_chunks/Customers-B8BlQ1BO.mjs +273 -0
  7. package/dist/_chunks/Customers-D0O5ET5C.js +273 -0
  8. package/dist/_chunks/Dashboard-CuqclLak.js +180 -0
  9. package/dist/_chunks/Dashboard-D8-ifJqB.mjs +180 -0
  10. package/dist/_chunks/Orders-5WGSzPGo.js +308 -0
  11. package/dist/_chunks/Orders-ClJJaQrX.mjs +308 -0
  12. package/dist/_chunks/Payments-CIMyOC3n.js +489 -0
  13. package/dist/_chunks/Payments-CRnRBf48.mjs +489 -0
  14. package/dist/_chunks/Settings-BXMLePI_.js +357 -0
  15. package/dist/_chunks/Settings-TeAvV4RH.mjs +357 -0
  16. package/dist/_chunks/en-BJocyOVu.mjs +240 -0
  17. package/dist/_chunks/en-BkVAf_R4.js +240 -0
  18. package/dist/_chunks/index-BTk7a2T5.js +66 -0
  19. package/dist/_chunks/index-Bz8V_5zH.mjs +67 -0
  20. package/dist/admin/index.js +2 -63
  21. package/dist/admin/index.mjs +2 -63
  22. package/dist/admin/src/components/AnalyticsChart.d.ts +19 -0
  23. package/dist/admin/src/components/CustomerList.d.ts +21 -0
  24. package/dist/admin/src/components/OrderList.d.ts +27 -0
  25. package/dist/admin/src/components/PaymentCard.d.ts +39 -0
  26. package/dist/admin/src/components/PaymentList.d.ts +19 -0
  27. package/dist/admin/src/components/RefundModal.d.ts +15 -0
  28. package/dist/admin/src/pages/Analytics.d.ts +2 -0
  29. package/dist/admin/src/pages/Customers.d.ts +2 -0
  30. package/dist/admin/src/pages/Dashboard.d.ts +2 -0
  31. package/dist/admin/src/pages/HomePage.d.ts +1 -1
  32. package/dist/admin/src/pages/Orders.d.ts +2 -0
  33. package/dist/admin/src/pages/Payments.d.ts +2 -0
  34. package/dist/admin/src/pages/Settings.d.ts +2 -0
  35. package/dist/server/index.js +1827 -7101
  36. package/dist/server/index.mjs +1826 -7100
  37. package/dist/server/src/config/index.d.ts +2 -10
  38. package/dist/server/src/content-types/customer/index.d.ts +69 -0
  39. package/dist/server/src/content-types/index.d.ts +207 -1
  40. package/dist/server/src/content-types/order/index.d.ts +70 -0
  41. package/dist/server/src/content-types/payment/index.d.ts +69 -0
  42. package/dist/server/src/controllers/controller.d.ts +6 -9
  43. package/dist/server/src/controllers/index.d.ts +30 -35
  44. package/dist/server/src/controllers/stripe.d.ts +104 -0
  45. package/dist/server/src/index.d.ts +262 -110
  46. package/dist/server/src/middlewares/index.d.ts +19 -1
  47. package/dist/server/src/policies/index.d.ts +3 -1
  48. package/dist/server/src/routes/{admin-routes.d.ts → admin/index.d.ts} +4 -4
  49. package/dist/server/src/routes/content-api/index.d.ts +21 -0
  50. package/dist/server/src/routes/index.d.ts +10 -26
  51. package/dist/server/src/services/index.d.ts +2 -37
  52. package/dist/server/src/services/{stripeDriver.d.ts → stripe.d.ts} +52 -28
  53. package/dist/server/src/types/index.d.ts +179 -0
  54. package/package.json +20 -24
  55. package/dist/_chunks/App-BGle38NN.js +0 -1149
  56. package/dist/_chunks/App-DoUUpjp-.mjs +0 -1149
  57. package/dist/_chunks/en-B4KWt_jN.js +0 -4
  58. package/dist/_chunks/en-Byx4XI2L.mjs +0 -4
  59. package/dist/admin/src/components/Header.d.ts +0 -2
  60. package/dist/admin/src/components/NavigationMenu.d.ts +0 -2
  61. package/dist/admin/src/components/Sidebar.d.ts +0 -2
  62. package/dist/admin/src/components/TransactionDetailsModal.d.ts +0 -18
  63. package/dist/admin/src/components/TransactionList.d.ts +0 -18
  64. package/dist/admin/src/pages/ConfigurationPage.d.ts +0 -2
  65. package/dist/admin/src/pages/DashboardPage.d.ts +0 -2
  66. package/dist/admin/src/pages/ProductsPage.d.ts +0 -2
  67. package/dist/admin/src/pages/SubscriptionsPage.d.ts +0 -2
  68. package/dist/admin/src/pages/TransactionsPage.d.ts +0 -2
  69. package/dist/server/controllers/product.d.ts +0 -12
  70. package/dist/server/controllers/subscription.d.ts +0 -12
  71. package/dist/server/services/product.d.ts +0 -7
  72. package/dist/server/services/subscription.d.ts +0 -7
  73. package/dist/server/src/controllers/productController.d.ts +0 -9
  74. package/dist/server/src/controllers/subscriptionController.d.ts +0 -9
  75. package/dist/server/src/routes/content-api.d.ts +0 -12
  76. package/dist/server/src/routes/product-routes.d.ts +0 -13
  77. package/dist/server/src/routes/refund-routes.d.ts +0 -13
  78. package/dist/server/src/routes/subscription-routes.d.ts +0 -13
  79. package/dist/server/src/services/paypalDriver.d.ts +0 -7
  80. package/dist/server/src/services/service.d.ts +0 -33
  81. package/jest.config.js +0 -13
@@ -0,0 +1,355 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const React = require("react");
5
+ const designSystem = require("@strapi/design-system");
6
+ const reactIntl = require("react-intl");
7
+ const admin = require("@strapi/strapi/admin");
8
+ const index = require("./index-BTk7a2T5.js");
9
+ const AnalyticsChart = ({ data, currency = "usd", type }) => {
10
+ const formatCurrency = (amount) => {
11
+ return new Intl.NumberFormat("en-US", {
12
+ style: "currency",
13
+ currency: currency.toUpperCase()
14
+ }).format(amount);
15
+ };
16
+ const formatNumber = (num) => {
17
+ return new Intl.NumberFormat("en-US").format(num);
18
+ };
19
+ const renderLineChart = (trendData) => {
20
+ const maxRevenue = Math.max(...trendData.revenue);
21
+ const maxPayments = Math.max(...trendData.payments);
22
+ const maxCustomers = Math.max(...trendData.customers);
23
+ return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Grid.Root, { gap: 4, children: [
24
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Item, { col: 3, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { marginBottom: 4, children: [
25
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "epsilon", textColor: "neutral600", fontWeight: "bold", children: "Revenue Trend" }),
26
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { direction: "row", gap: 8, children: trendData.labels.map((label, index2) => {
27
+ const revenueValue = trendData.revenue[index2];
28
+ const percentage = revenueValue / maxRevenue * 100;
29
+ console.log("Revenue Value:", revenueValue, "Percentage:", percentage);
30
+ console.log("trend data:", trendData);
31
+ return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { children: [
32
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { justifyContent: "space-between", marginBottom: 1, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "epsilon", fontWeight: "bold", children: formatCurrency(revenueValue) }) }),
33
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.ProgressBar, { value: percentage })
34
+ ] }, index2);
35
+ }) })
36
+ ] }) }),
37
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Item, { col: 3, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { marginBottom: 4, children: [
38
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "epsilon", textColor: "neutral600", fontWeight: "bold", children: "Payments Trend" }),
39
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { direction: "column", gap: 2, children: trendData.labels.map((label, index2) => {
40
+ const paymentsValue = trendData.payments[index2];
41
+ const percentage = paymentsValue / maxPayments * 100;
42
+ return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { children: [
43
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { justifyContent: "space-between", marginBottom: 1, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "epsilon", fontWeight: "bold", children: formatNumber(paymentsValue) }) }),
44
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.ProgressBar, { value: percentage })
45
+ ] }, index2);
46
+ }) })
47
+ ] }) }),
48
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Item, { col: 3, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { marginBottom: 4, children: [
49
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "epsilon", textColor: "neutral600", fontWeight: "bold", children: "Customer Growth" }),
50
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { direction: "column", gap: 2, children: trendData.labels.map((label, index2) => {
51
+ const customersValue = trendData.customers[index2];
52
+ const percentage = customersValue / maxCustomers * 100;
53
+ return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { children: [
54
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { justifyContent: "space-between", marginBottom: 1, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "epsilon", fontWeight: "bold", children: formatNumber(customersValue) }) }),
55
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.ProgressBar, { value: percentage })
56
+ ] }, index2);
57
+ }) })
58
+ ] }) })
59
+ ] }) });
60
+ };
61
+ const renderPieChart = (paymentData) => {
62
+ const colors = ["#4945FF", "#0F9D58", "#FF6B35", "#9C27B0", "#FF9800"];
63
+ return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { direction: "column", gap: 3, children: paymentData.map((item, index2) => /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { children: [
64
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { justifyContent: "space-between", alignItems: "center", marginBottom: 2, children: [
65
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { alignItems: "center", gap: 2, children: [
66
+ /* @__PURE__ */ jsxRuntime.jsx(
67
+ designSystem.Box,
68
+ {
69
+ style: {
70
+ width: "12px",
71
+ height: "12px",
72
+ backgroundColor: colors[index2 % colors.length],
73
+ borderRadius: "50%"
74
+ }
75
+ }
76
+ ),
77
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "epsilon", fontWeight: "bold", children: item.method })
78
+ ] }),
79
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Typography, { variant: "epsilon", textColor: "neutral600", children: [
80
+ item.percentage,
81
+ "%"
82
+ ] })
83
+ ] }),
84
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.ProgressBar, { value: item.percentage }),
85
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Typography, { variant: "epsilon", textColor: "neutral600", marginTop: 1, children: [
86
+ formatNumber(item.count),
87
+ " transactions"
88
+ ] })
89
+ ] }, index2)) }) });
90
+ };
91
+ const renderBarChart = (chartData) => {
92
+ return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "epsilon", textColor: "neutral600", children: "Bar chart visualization coming soon..." }) });
93
+ };
94
+ const renderChart = () => {
95
+ switch (type) {
96
+ case "line":
97
+ return renderLineChart(data);
98
+ case "pie":
99
+ return renderPieChart(data);
100
+ case "bar":
101
+ return renderBarChart();
102
+ default:
103
+ return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "epsilon", textColor: "danger500", children: "Invalid chart type" });
104
+ }
105
+ };
106
+ return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { children: renderChart() });
107
+ };
108
+ const Analytics = () => {
109
+ const { formatMessage } = reactIntl.useIntl();
110
+ const { get } = admin.useFetchClient();
111
+ const [analyticsData, setAnalyticsData] = React.useState(null);
112
+ const [loading, setLoading] = React.useState(true);
113
+ const [error, setError] = React.useState(null);
114
+ const [dateRange, setDateRange] = React.useState("30d");
115
+ const [currency, setCurrency] = React.useState("usd");
116
+ React.useEffect(() => {
117
+ fetchAnalyticsData();
118
+ }, [dateRange, currency]);
119
+ const fetchAnalyticsData = async () => {
120
+ try {
121
+ setLoading(true);
122
+ const { data } = await get(`/${index.PLUGIN_ID}/admin/analytics?period=${dateRange}`);
123
+ if (data.success && data.data) {
124
+ const dailyStats = data.data.dailyStats || {};
125
+ const labels = Object.keys(dailyStats).sort();
126
+ const revenue = labels.map((label) => dailyStats[label].amount);
127
+ const payments = labels.map((label) => dailyStats[label].count);
128
+ setAnalyticsData({
129
+ revenue: {
130
+ total: data.data.totalVolume,
131
+ growth: 0,
132
+ period: `Last ${dateRange}`
133
+ },
134
+ payments: {
135
+ total: data.data.totalTransactions,
136
+ successRate: 100,
137
+ averageAmount: data.data.averageTransaction,
138
+ period: `Last ${dateRange}`
139
+ },
140
+ customers: {
141
+ total: 0,
142
+ newCustomers: 0,
143
+ returningCustomers: 0,
144
+ period: `Last ${dateRange}`
145
+ },
146
+ trends: {
147
+ labels,
148
+ revenue,
149
+ payments,
150
+ customers: Array(labels.length).fill(0)
151
+ },
152
+ topProducts: [],
153
+ paymentMethods: [],
154
+ geographicData: []
155
+ });
156
+ }
157
+ setLoading(false);
158
+ } catch (err) {
159
+ setError("Failed to fetch analytics data");
160
+ setLoading(false);
161
+ }
162
+ };
163
+ const formatCurrency = (amount, currency2 = "usd") => {
164
+ return new Intl.NumberFormat("en-US", {
165
+ style: "currency",
166
+ currency: currency2.toUpperCase()
167
+ }).format(amount);
168
+ };
169
+ const exportReport = () => {
170
+ if (!analyticsData) return;
171
+ const csvContent = [
172
+ ["Analytics Report", (/* @__PURE__ */ new Date()).toLocaleDateString()],
173
+ [""],
174
+ ["SUMMARY"],
175
+ ["Total Revenue", formatCurrency(analyticsData.revenue.total, currency)],
176
+ ["Revenue Growth", `${analyticsData.revenue.growth}%`],
177
+ ["Total Payments", analyticsData.payments.total.toString()],
178
+ ["Success Rate", `${analyticsData.payments.successRate}%`],
179
+ ["Average Amount", formatCurrency(analyticsData.payments.averageAmount, currency)],
180
+ ["Total Customers", analyticsData.customers.total.toString()],
181
+ ["New Customers", analyticsData.customers.newCustomers.toString()],
182
+ [""],
183
+ ["TOP PRODUCTS"],
184
+ ["Product Name", "Revenue", "Quantity Sold"],
185
+ ...analyticsData.topProducts.map((product) => [
186
+ product.name,
187
+ formatCurrency(product.revenue, currency),
188
+ product.quantity.toString()
189
+ ]),
190
+ [""],
191
+ ["PAYMENT METHODS"],
192
+ ["Method", "Count", "Percentage"],
193
+ ...analyticsData.paymentMethods.map((method) => [
194
+ method.method,
195
+ method.count.toString(),
196
+ `${method.percentage}%`
197
+ ]),
198
+ [""],
199
+ ["GEOGRAPHIC DATA"],
200
+ ["Country", "Revenue", "Transactions"],
201
+ ...analyticsData.geographicData.map((geo) => [
202
+ geo.country,
203
+ formatCurrency(geo.revenue, currency),
204
+ geo.transactions.toString()
205
+ ])
206
+ ].map((row) => row.join(",")).join("\n");
207
+ const blob = new Blob([csvContent], { type: "text/csv" });
208
+ const url = window.URL.createObjectURL(blob);
209
+ const a = document.createElement("a");
210
+ a.href = url;
211
+ a.download = `payment-analytics-${(/* @__PURE__ */ new Date()).toISOString().split("T")[0]}.csv`;
212
+ a.click();
213
+ window.URL.revokeObjectURL(url);
214
+ };
215
+ if (loading) {
216
+ return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { padding: 4, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { justifyContent: "center", alignItems: "center", style: { minHeight: "400px" }, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Loader, {}) }) });
217
+ }
218
+ if (error) {
219
+ return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { padding: 4, children: /* @__PURE__ */ jsxRuntime.jsx(
220
+ designSystem.EmptyStateLayout,
221
+ {
222
+ title: "Error loading analytics",
223
+ subtitle: error,
224
+ action: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { onClick: fetchAnalyticsData, children: formatMessage({ id: "payment-plugin.analytics.retry", defaultMessage: "Retry" }) })
225
+ }
226
+ ) });
227
+ }
228
+ if (!analyticsData) return null;
229
+ return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { paddingLeft: 10, paddingRight: 10, paddingTop: 4, children: [
230
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { marginBottom: 4, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { justifyContent: "space-between", alignItems: "center", children: [
231
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { children: [
232
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "alpha", tag: "h1", children: formatMessage({ id: "payment-plugin.analytics.title", defaultMessage: "Analytics" }) }),
233
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "epsilon", textColor: "neutral600", children: formatMessage({
234
+ id: "payment-plugin.analytics.subtitle",
235
+ defaultMessage: "Payment insights and performance metrics"
236
+ }) })
237
+ ] }),
238
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
239
+ /* @__PURE__ */ jsxRuntime.jsxs(
240
+ designSystem.SingleSelect,
241
+ {
242
+ value: dateRange,
243
+ onChange: (value) => setDateRange(value),
244
+ children: [
245
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.SingleSelectOption, { value: "7d", children: "Last 7 days" }),
246
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.SingleSelectOption, { value: "30d", children: "Last 30 days" }),
247
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.SingleSelectOption, { value: "90d", children: "Last 90 days" }),
248
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.SingleSelectOption, { value: "1y", children: "Last year" })
249
+ ]
250
+ }
251
+ ),
252
+ /* @__PURE__ */ jsxRuntime.jsxs(
253
+ designSystem.SingleSelect,
254
+ {
255
+ value: currency,
256
+ onChange: (value) => setCurrency(value),
257
+ children: [
258
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.SingleSelectOption, { value: "usd", children: "USD" }),
259
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.SingleSelectOption, { value: "eur", children: "EUR" }),
260
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.SingleSelectOption, { value: "gbp", children: "GBP" })
261
+ ]
262
+ }
263
+ ),
264
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { variant: "secondary", onClick: exportReport, children: formatMessage({ id: "payment-plugin.analytics.export", defaultMessage: "Export Report" }) }),
265
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { onClick: fetchAnalyticsData, children: formatMessage({ id: "payment-plugin.analytics.refresh", defaultMessage: "Refresh" }) })
266
+ ] })
267
+ ] }) }),
268
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Grid.Root, { gap: 4, marginBottom: 4, children: [
269
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Item, { col: 4, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Card, { style: { width: "100%" }, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { padding: 4, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", gap: 2, children: [
270
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "epsilon", textColor: "neutral600", children: formatMessage({ id: "payment-plugin.analytics.totalRevenue", defaultMessage: "Total Revenue" }) }),
271
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "delta", fontWeight: "bold", children: formatCurrency(analyticsData.revenue.total, currency) }),
272
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, alignItems: "center", children: [
273
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Badge, { size: "S", backgroundColor: "success", children: [
274
+ "+",
275
+ analyticsData.revenue.growth,
276
+ "%"
277
+ ] }),
278
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "epsilon", textColor: "neutral600", children: analyticsData.revenue.period })
279
+ ] })
280
+ ] }) }) }) }),
281
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Item, { col: 4, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Card, { style: { width: "100%" }, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { padding: 4, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", gap: 2, children: [
282
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "epsilon", textColor: "neutral600", children: formatMessage({ id: "payment-plugin.analytics.successRate", defaultMessage: "Success Rate" }) }),
283
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Typography, { variant: "delta", fontWeight: "bold", children: [
284
+ analyticsData.payments.successRate,
285
+ "%"
286
+ ] }),
287
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "epsilon", textColor: "neutral600", children: formatMessage(
288
+ { id: "payment-plugin.analytics.outOfPayments", defaultMessage: "{total} payments" },
289
+ { total: analyticsData.payments.total }
290
+ ) })
291
+ ] }) }) }) }),
292
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Item, { col: 4, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Card, { style: { width: "100%" }, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { padding: 4, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", gap: 2, children: [
293
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "epsilon", textColor: "neutral600", children: formatMessage({ id: "payment-plugin.analytics.averageAmount", defaultMessage: "Average Amount" }) }),
294
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "delta", fontWeight: "bold", children: formatCurrency(analyticsData.payments.averageAmount, currency) }),
295
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "epsilon", textColor: "neutral600", children: analyticsData.payments.period })
296
+ ] }) }) }) })
297
+ ] }),
298
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Grid.Root, { gap: 4, marginBottom: 4, children: [
299
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Item, { col: 8, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Card, { style: { width: "100%" }, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { padding: 4, style: { width: "100%" }, children: [
300
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "beta", tag: "h2", marginBottom: 4, children: formatMessage({ id: "payment-plugin.analytics.trends", defaultMessage: "Revenue Trends" }) }),
301
+ /* @__PURE__ */ jsxRuntime.jsx(
302
+ AnalyticsChart,
303
+ {
304
+ data: analyticsData.trends,
305
+ currency,
306
+ type: "line"
307
+ }
308
+ )
309
+ ] }) }) }),
310
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Item, { col: 4, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Card, { style: { width: "100%", height: "100%" }, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { padding: 4, children: [
311
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "beta", tag: "h2", marginBottom: 4, children: formatMessage({ id: "payment-plugin.analytics.paymentMethods", defaultMessage: "Payment Methods" }) }),
312
+ /* @__PURE__ */ jsxRuntime.jsx(
313
+ AnalyticsChart,
314
+ {
315
+ data: analyticsData.paymentMethods,
316
+ type: "pie"
317
+ }
318
+ )
319
+ ] }) }) })
320
+ ] }),
321
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Grid.Root, { gap: 4, children: [
322
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Item, { col: 6, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Card, { style: { width: "100%" }, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { padding: 4, children: [
323
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "beta", tag: "h2", marginBottom: 4, children: formatMessage({ id: "payment-plugin.analytics.topProducts", defaultMessage: "Top Products" }) }),
324
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Table, { children: [
325
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Thead, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Tr, { children: [
326
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Th, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "epsilon", children: formatMessage({ id: "payment-plugin.analytics.product", defaultMessage: "Product" }) }) }),
327
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Th, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "epsilon", children: formatMessage({ id: "payment-plugin.analytics.revenue", defaultMessage: "Revenue" }) }) }),
328
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Th, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "epsilon", children: formatMessage({ id: "payment-plugin.analytics.quantity", defaultMessage: "Quantity" }) }) })
329
+ ] }) }),
330
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Tbody, { children: analyticsData.topProducts.map((product, index2) => /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Tr, { children: [
331
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "neutral800", fontWeight: "bold", children: product.name }) }),
332
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "neutral800", children: formatCurrency(product.revenue, currency) }) }),
333
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "neutral600", children: product.quantity }) })
334
+ ] }, index2)) })
335
+ ] })
336
+ ] }) }) }),
337
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Item, { col: 6, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Card, { style: { width: "100%" }, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { padding: 4, children: [
338
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "beta", tag: "h2", marginBottom: 4, children: formatMessage({ id: "payment-plugin.analytics.geographic", defaultMessage: "Geographic Distribution" }) }),
339
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Table, { children: [
340
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Thead, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Tr, { children: [
341
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Th, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "epsilon", children: formatMessage({ id: "payment-plugin.analytics.country", defaultMessage: "Country" }) }) }),
342
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Th, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "epsilon", children: formatMessage({ id: "payment-plugin.analytics.revenue", defaultMessage: "Revenue" }) }) }),
343
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Th, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "epsilon", children: formatMessage({ id: "payment-plugin.analytics.transactions", defaultMessage: "Transactions" }) }) })
344
+ ] }) }),
345
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Tbody, { children: analyticsData.geographicData.map((geo, index2) => /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Tr, { children: [
346
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "neutral800", fontWeight: "bold", children: geo.country }) }),
347
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "neutral800", children: formatCurrency(geo.revenue, currency) }) }),
348
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "neutral600", children: geo.transactions }) })
349
+ ] }, index2)) })
350
+ ] })
351
+ ] }) }) })
352
+ ] })
353
+ ] });
354
+ };
355
+ exports.Analytics = Analytics;