strapi-plugin-magic-mail 2.9.2 → 2.10.0

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.
@@ -0,0 +1,354 @@
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 admin = require("@strapi/strapi/admin");
7
+ const outline = require("@heroicons/react/24/outline");
8
+ const styled = require("styled-components");
9
+ const StyledButtons = require("./StyledButtons-DVGuFoqy.js");
10
+ const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
11
+ const styled__default = /* @__PURE__ */ _interopDefault(styled);
12
+ const fadeIn = styled.keyframes`
13
+ from { opacity: 0; transform: translateY(10px); }
14
+ to { opacity: 1; transform: translateY(0); }
15
+ `;
16
+ const shimmer = styled.keyframes`
17
+ 0% { background-position: -200% 0; }
18
+ 100% { background-position: 200% 0; }
19
+ `;
20
+ const Container = styled__default.default(designSystem.Box)`
21
+ ${styled.css`animation: ${fadeIn} 0.5s;`}
22
+ max-width: 1400px;
23
+ margin: 0 auto;
24
+ `;
25
+ const StickySaveBar = styled__default.default(designSystem.Box)`
26
+ position: sticky;
27
+ top: 0;
28
+ z-index: 10;
29
+ background: ${(p) => p.theme.colors.neutral0};
30
+ border-bottom: 1px solid rgba(128, 128, 128, 0.2);
31
+ box-shadow: 0 1px 3px rgba(0,0,0,0.1);
32
+ `;
33
+ const LicenseKeyBanner = styled__default.default(designSystem.Box)`
34
+ background: linear-gradient(135deg, var(--colors-primary600, #0EA5E9) 0%, var(--colors-secondary500, #A855F7) 100%);
35
+ border-radius: 12px;
36
+ padding: 28px 32px;
37
+ color: white;
38
+ position: relative;
39
+ overflow: hidden;
40
+ box-shadow: 0 4px 20px rgba(14, 165, 233, 0.25);
41
+ margin-bottom: 24px;
42
+
43
+ &::after {
44
+ content: '';
45
+ position: absolute;
46
+ top: -50%;
47
+ right: -50%;
48
+ width: 200%;
49
+ height: 200%;
50
+ background: linear-gradient(
51
+ 45deg,
52
+ transparent,
53
+ rgba(255, 255, 255, 0.08),
54
+ transparent
55
+ );
56
+ ${styled.css`animation: ${shimmer} 3s infinite;`}
57
+ pointer-events: none;
58
+ z-index: 0;
59
+ }
60
+
61
+ & > * {
62
+ position: relative;
63
+ z-index: 1;
64
+ }
65
+ `;
66
+ const LoaderContainer = styled__default.default(designSystem.Flex)`
67
+ min-height: 400px;
68
+ align-items: center;
69
+ justify-content: center;
70
+ flex-direction: column;
71
+ gap: 16px;
72
+ `;
73
+ const LicenseDetailsPage = () => {
74
+ const { get } = admin.useFetchClient();
75
+ const { toggleNotification } = admin.useNotification();
76
+ const [loading, setLoading] = React.useState(true);
77
+ const [licenseData, setLicenseData] = React.useState(null);
78
+ const [error, setError] = React.useState(null);
79
+ const fetchLicenseStatus = async () => {
80
+ setLoading(true);
81
+ setError(null);
82
+ try {
83
+ const response = await get("/magic-mail/license/status");
84
+ setLicenseData(response.data);
85
+ } catch (err) {
86
+ console.error("[MagicMail] Error fetching license:", err);
87
+ setError("Failed to load license information");
88
+ } finally {
89
+ setLoading(false);
90
+ }
91
+ };
92
+ const handleCopyLicenseKey = async () => {
93
+ try {
94
+ await navigator.clipboard.writeText(licenseData?.data?.licenseKey || "");
95
+ toggleNotification({
96
+ type: "success",
97
+ message: "License key copied to clipboard!"
98
+ });
99
+ } catch (err) {
100
+ toggleNotification({
101
+ type: "danger",
102
+ message: "Failed to copy license key"
103
+ });
104
+ }
105
+ };
106
+ const handleDownloadLicenseKey = () => {
107
+ try {
108
+ const data2 = licenseData?.data || {};
109
+ const licenseKey = data2.licenseKey || "";
110
+ const email = data2.email || "N/A";
111
+ const firstName = data2.firstName || "";
112
+ const lastName = data2.lastName || "";
113
+ const fullName = `${firstName} ${lastName}`.trim() || "N/A";
114
+ const content = `MagicMail - Email Business Suite - License Key
115
+ ===============================================
116
+
117
+ License Key: ${licenseKey}
118
+
119
+ License Holder Information:
120
+ ----------------------------------------------
121
+ Name: ${fullName}
122
+ Email: ${email}
123
+
124
+ License Status:
125
+ ----------------------------------------------
126
+ Status: ${data2.isActive ? "ACTIVE" : "INACTIVE"}
127
+ Expires: ${data2.expiresAt ? new Date(data2.expiresAt).toLocaleDateString() : "Never"}
128
+
129
+ Features:
130
+ ----------------------------------------------
131
+ Premium: ${data2.features?.premium ? "Enabled" : "Disabled"}
132
+ Advanced: ${data2.features?.advanced ? "Enabled" : "Disabled"}
133
+ Enterprise: ${data2.features?.enterprise ? "Enabled" : "Disabled"}
134
+
135
+ ===============================================
136
+ Generated: ${(/* @__PURE__ */ new Date()).toLocaleString()}
137
+ `;
138
+ const blob = new Blob([content], { type: "text/plain" });
139
+ const url = window.URL.createObjectURL(blob);
140
+ const link = document.createElement("a");
141
+ link.href = url;
142
+ link.download = `magicmail-license-${licenseKey.substring(0, 8)}.txt`;
143
+ document.body.appendChild(link);
144
+ link.click();
145
+ document.body.removeChild(link);
146
+ window.URL.revokeObjectURL(url);
147
+ toggleNotification({
148
+ type: "success",
149
+ message: "License key downloaded successfully!"
150
+ });
151
+ } catch (err) {
152
+ toggleNotification({
153
+ type: "danger",
154
+ message: "Failed to download license key"
155
+ });
156
+ }
157
+ };
158
+ React.useEffect(() => {
159
+ fetchLicenseStatus();
160
+ }, []);
161
+ if (loading) {
162
+ return /* @__PURE__ */ jsxRuntime.jsx(Container, { children: /* @__PURE__ */ jsxRuntime.jsx(LoaderContainer, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Loader, { children: "Loading license information..." }) }) });
163
+ }
164
+ if (error) {
165
+ return /* @__PURE__ */ jsxRuntime.jsx(Container, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { padding: 8, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Alert, { variant: "danger", title: "Error", closeLabel: "Close", children: error }) }) });
166
+ }
167
+ const isValid = licenseData?.valid;
168
+ const isDemo = licenseData?.demo;
169
+ const data = licenseData?.data || {};
170
+ return /* @__PURE__ */ jsxRuntime.jsxs(Container, { children: [
171
+ /* @__PURE__ */ jsxRuntime.jsx(StickySaveBar, { paddingTop: 5, paddingBottom: 5, paddingLeft: 6, paddingRight: 6, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { justifyContent: "space-between", alignItems: "flex-start", children: [
172
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", gap: 1, alignItems: "flex-start", children: [
173
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "alpha", fontWeight: "bold", children: "License Management" }),
174
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "epsilon", textColor: "neutral600", children: "View your MagicMail plugin license" })
175
+ ] }),
176
+ /* @__PURE__ */ jsxRuntime.jsx(
177
+ StyledButtons.SecondaryButton,
178
+ {
179
+ startIcon: /* @__PURE__ */ jsxRuntime.jsx(outline.ArrowPathIcon, { style: { width: 18, height: 18 } }),
180
+ onClick: fetchLicenseStatus,
181
+ children: "Refresh Status"
182
+ }
183
+ )
184
+ ] }) }),
185
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { paddingTop: 6, paddingLeft: 6, paddingRight: 6, paddingBottom: 10, children: [
186
+ isDemo ? /* @__PURE__ */ jsxRuntime.jsx(designSystem.Alert, { variant: "warning", title: "Demo Mode", closeLabel: "Close", children: "You're using the demo version. Create a license to unlock all features." }) : isValid ? /* @__PURE__ */ jsxRuntime.jsx(designSystem.Alert, { variant: "success", title: "License Active", closeLabel: "Close", children: "Your license is active and all features are unlocked." }) : /* @__PURE__ */ jsxRuntime.jsx(designSystem.Alert, { variant: "danger", title: "License Issue", closeLabel: "Close", children: "There's an issue with your license. Please check your license status." }),
187
+ data.licenseKey && /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { marginTop: 6, children: /* @__PURE__ */ jsxRuntime.jsx(LicenseKeyBanner, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { justifyContent: "space-between", alignItems: "flex-start", children: [
188
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { style: { flex: 1 }, children: [
189
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "pi", style: { color: "rgba(255,255,255,0.8)", marginBottom: "12px", textTransform: "uppercase", fontSize: "11px", letterSpacing: "0.5px", display: "block" }, children: "License Key" }),
190
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { style: { color: "white", fontFamily: "monospace", fontSize: "28px", fontWeight: "bold", wordBreak: "break-all", marginBottom: "16px" }, children: data.licenseKey }),
191
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
192
+ /* @__PURE__ */ jsxRuntime.jsx(
193
+ StyledButtons.WhiteOutlineButton,
194
+ {
195
+ onClick: handleCopyLicenseKey,
196
+ startIcon: /* @__PURE__ */ jsxRuntime.jsx(outline.DocumentDuplicateIcon, { style: { width: 16, height: 16 } }),
197
+ size: "S",
198
+ children: "Copy Key"
199
+ }
200
+ ),
201
+ /* @__PURE__ */ jsxRuntime.jsx(
202
+ StyledButtons.WhiteOutlineButton,
203
+ {
204
+ onClick: handleDownloadLicenseKey,
205
+ startIcon: /* @__PURE__ */ jsxRuntime.jsx(outline.ArrowDownTrayIcon, { style: { width: 16, height: 16 } }),
206
+ size: "S",
207
+ children: "Download as TXT"
208
+ }
209
+ )
210
+ ] })
211
+ ] }),
212
+ /* @__PURE__ */ jsxRuntime.jsx(
213
+ designSystem.Badge,
214
+ {
215
+ backgroundColor: data.isActive ? "success100" : "danger100",
216
+ textColor: data.isActive ? "success700" : "danger700",
217
+ style: { fontSize: "11px", fontWeight: "700", padding: "6px 12px", marginLeft: "16px", flexShrink: 0 },
218
+ children: data.isActive ? "ACTIVE" : "INACTIVE"
219
+ }
220
+ )
221
+ ] }) }) }),
222
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { marginTop: 6, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Accordion.Root, { defaultValue: "account", collapsible: true, children: [
223
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Accordion.Item, { value: "account", children: [
224
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Header, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Trigger, { icon: () => /* @__PURE__ */ jsxRuntime.jsx(outline.UserIcon, { style: { width: 16, height: 16 } }), children: "Account Information" }) }),
225
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Content, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { padding: 6, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 8, wrap: "wrap", children: [
226
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { style: { flex: "1", minWidth: "200px" }, children: [
227
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "sigma", textColor: "neutral600", textTransform: "uppercase", style: { marginBottom: "8px", display: "block" }, children: "Email Address" }),
228
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", fontWeight: "semiBold", children: data.email || "Not provided" })
229
+ ] }),
230
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { style: { flex: "1", minWidth: "200px" }, children: [
231
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "sigma", textColor: "neutral600", textTransform: "uppercase", style: { marginBottom: "8px", display: "block" }, children: "License Holder" }),
232
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", fontWeight: "semiBold", children: data.firstName && data.lastName ? `${data.firstName} ${data.lastName}` : "Not specified" })
233
+ ] })
234
+ ] }) }) })
235
+ ] }),
236
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Accordion.Item, { value: "details", children: [
237
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Header, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Trigger, { icon: () => /* @__PURE__ */ jsxRuntime.jsx(outline.ShieldCheckIcon, { style: { width: 16, height: 16 } }), children: "License Details" }) }),
238
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Content, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { padding: 6, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 8, wrap: "wrap", children: [
239
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { style: { flex: "1", minWidth: "180px" }, children: [
240
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "sigma", textColor: "neutral600", textTransform: "uppercase", style: { marginBottom: "8px", display: "block" }, children: data.isExpired ? "Expired On" : "Expires On" }),
241
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", fontWeight: "semiBold", children: data.expiresAt ? new Date(data.expiresAt).toLocaleDateString("en-US", {
242
+ year: "numeric",
243
+ month: "long",
244
+ day: "numeric"
245
+ }) : "Never" })
246
+ ] }),
247
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { style: { flex: "1", minWidth: "180px" }, children: [
248
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "sigma", textColor: "neutral600", textTransform: "uppercase", style: { marginBottom: "8px", display: "block" }, children: "Device Name" }),
249
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", fontWeight: "semiBold", children: data.deviceName || "Unknown" })
250
+ ] }),
251
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { style: { flex: "1", minWidth: "180px" }, children: [
252
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "sigma", textColor: "neutral600", textTransform: "uppercase", style: { marginBottom: "8px", display: "block" }, children: "IP Address" }),
253
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", fontWeight: "semiBold", children: data.ipAddress || "Not detected" })
254
+ ] })
255
+ ] }) }) })
256
+ ] }),
257
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Accordion.Item, { value: "features", children: [
258
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Header, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Trigger, { icon: () => /* @__PURE__ */ jsxRuntime.jsx(outline.SparklesIcon, { style: { width: 16, height: 16 } }), children: "Features & Capabilities" }) }),
259
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Content, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { padding: 6, children: [
260
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 3, style: { marginBottom: "32px" }, children: [
261
+ /* @__PURE__ */ jsxRuntime.jsxs(
262
+ designSystem.Badge,
263
+ {
264
+ backgroundColor: data.features?.premium ? "success100" : "neutral100",
265
+ textColor: data.features?.premium ? "success700" : "neutral600",
266
+ style: { fontSize: "13px", fontWeight: "700", padding: "8px 16px" },
267
+ children: [
268
+ data.features?.premium ? "[OK]" : "[X]",
269
+ " PREMIUM"
270
+ ]
271
+ }
272
+ ),
273
+ /* @__PURE__ */ jsxRuntime.jsxs(
274
+ designSystem.Badge,
275
+ {
276
+ backgroundColor: data.features?.advanced ? "primary100" : "neutral100",
277
+ textColor: data.features?.advanced ? "primary700" : "neutral600",
278
+ style: { fontSize: "13px", fontWeight: "700", padding: "8px 16px" },
279
+ children: [
280
+ data.features?.advanced ? "[OK]" : "[X]",
281
+ " ADVANCED"
282
+ ]
283
+ }
284
+ ),
285
+ /* @__PURE__ */ jsxRuntime.jsxs(
286
+ designSystem.Badge,
287
+ {
288
+ backgroundColor: data.features?.enterprise ? "secondary100" : "neutral100",
289
+ textColor: data.features?.enterprise ? "secondary700" : "neutral600",
290
+ style: { fontSize: "13px", fontWeight: "700", padding: "8px 16px" },
291
+ children: [
292
+ data.features?.enterprise ? "[OK]" : "[X]",
293
+ " ENTERPRISE"
294
+ ]
295
+ }
296
+ )
297
+ ] }),
298
+ data.features?.premium && /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { marginBottom: 5, padding: 5, background: "success50", hasRadius: true, children: [
299
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "delta", fontWeight: "bold", textColor: "success700", style: { marginBottom: "16px" }, children: "Premium Features Active" }),
300
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", gap: 2, children: [
301
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", textColor: "success700", children: "[OK] Gmail OAuth 2.0" }),
302
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", textColor: "success700", children: "[OK] Microsoft 365 OAuth" }),
303
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", textColor: "success700", children: "[OK] Smart Routing Rules" }),
304
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", textColor: "success700", children: "[OK] Email Analytics" })
305
+ ] })
306
+ ] }),
307
+ data.features?.advanced && /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { marginBottom: 5, padding: 5, background: "primary50", hasRadius: true, children: [
308
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "delta", fontWeight: "bold", textColor: "primary700", style: { marginBottom: "16px" }, children: "Advanced Features Active" }),
309
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", gap: 2, children: [
310
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", textColor: "primary700", children: "[OK] DKIM Signing" }),
311
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", textColor: "primary700", children: "[OK] Email Designer" }),
312
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", textColor: "primary700", children: "[OK] List-Unsubscribe Headers" })
313
+ ] })
314
+ ] }),
315
+ data.features?.enterprise && /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { padding: 5, background: "secondary50", hasRadius: true, children: [
316
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "delta", fontWeight: "bold", textColor: "secondary700", style: { marginBottom: "16px" }, children: "Enterprise Features Active" }),
317
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", gap: 2, children: [
318
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", textColor: "secondary700", children: "[OK] Multi-tenant Management" }),
319
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", textColor: "secondary700", children: "[OK] Compliance Reports" }),
320
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", textColor: "secondary700", children: "[OK] Priority Support" })
321
+ ] })
322
+ ] })
323
+ ] }) })
324
+ ] }),
325
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Accordion.Item, { value: "status", children: [
326
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Header, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Trigger, { icon: () => /* @__PURE__ */ jsxRuntime.jsx(outline.ChartBarIcon, { style: { width: 16, height: 16 } }), children: "System Status" }) }),
327
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Content, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { padding: 6, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 8, wrap: "wrap", children: [
328
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { style: { flex: "1", minWidth: "150px" }, children: [
329
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "sigma", textColor: "neutral600", textTransform: "uppercase", style: { marginBottom: "8px", display: "block" }, children: "License Status" }),
330
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", fontWeight: "semiBold", children: data.isActive ? "Active" : "Inactive" })
331
+ ] }),
332
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { style: { flex: "1", minWidth: "150px" }, children: [
333
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "sigma", textColor: "neutral600", textTransform: "uppercase", style: { marginBottom: "8px", display: "block" }, children: "Connection" }),
334
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", fontWeight: "semiBold", children: data.isOnline ? "Online" : "Offline" })
335
+ ] }),
336
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { style: { flex: "1", minWidth: "150px" }, children: [
337
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "sigma", textColor: "neutral600", textTransform: "uppercase", style: { marginBottom: "8px", display: "block" }, children: "Last Sync" }),
338
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", fontWeight: "semiBold", children: data.lastPingAt ? new Date(data.lastPingAt).toLocaleTimeString() : "Never" })
339
+ ] }),
340
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { style: { flex: "1", minWidth: "150px" }, children: [
341
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "sigma", textColor: "neutral600", textTransform: "uppercase", style: { marginBottom: "8px", display: "block" }, children: "Device Limit" }),
342
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Typography, { variant: "omega", fontWeight: "semiBold", children: [
343
+ data.currentDevices || 0,
344
+ " / ",
345
+ data.maxDevices || 1
346
+ ] })
347
+ ] })
348
+ ] }) }) })
349
+ ] })
350
+ ] }) })
351
+ ] })
352
+ ] });
353
+ };
354
+ exports.default = LicenseDetailsPage;