strapi-plugin-magic-sessionmanager 1.0.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,403 @@
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 icons = require("@strapi/icons");
8
+ const styled = require("styled-components");
9
+ const index = require("./index-Dd_SkI79.js");
10
+ const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
11
+ const styled__default = /* @__PURE__ */ _interopDefault(styled);
12
+ const theme = {
13
+ colors: {
14
+ neutral: { 200: "#E5E7EB" }
15
+ },
16
+ shadows: { sm: "0 1px 3px rgba(0,0,0,0.1)" },
17
+ borderRadius: { lg: "12px" }
18
+ };
19
+ const fadeIn = styled.keyframes`
20
+ from { opacity: 0; transform: translateY(10px); }
21
+ to { opacity: 1; transform: translateY(0); }
22
+ `;
23
+ const shimmer = styled.keyframes`
24
+ 0% { background-position: -200% 0; }
25
+ 100% { background-position: 200% 0; }
26
+ `;
27
+ const Container = styled__default.default(designSystem.Box)`
28
+ animation: ${fadeIn} 0.5s;
29
+ max-width: 1400px;
30
+ margin: 0 auto;
31
+ `;
32
+ const StickySaveBar = styled__default.default(designSystem.Box)`
33
+ position: sticky;
34
+ top: 0;
35
+ z-index: 10;
36
+ background: white;
37
+ border-bottom: 1px solid ${theme.colors.neutral[200]};
38
+ box-shadow: ${theme.shadows.sm};
39
+ `;
40
+ const LicenseKeyBanner = styled__default.default(designSystem.Box)`
41
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
42
+ border-radius: ${theme.borderRadius.lg};
43
+ padding: 28px 32px;
44
+ color: white;
45
+ position: relative;
46
+ overflow: hidden;
47
+ box-shadow: 0 4px 20px rgba(102, 126, 234, 0.25);
48
+ margin-bottom: 24px;
49
+
50
+ &::after {
51
+ content: '';
52
+ position: absolute;
53
+ top: -50%;
54
+ right: -50%;
55
+ width: 200%;
56
+ height: 200%;
57
+ background: linear-gradient(
58
+ 45deg,
59
+ transparent,
60
+ rgba(255, 255, 255, 0.08),
61
+ transparent
62
+ );
63
+ animation: ${shimmer} 3s infinite;
64
+ pointer-events: none;
65
+ z-index: 0;
66
+ }
67
+
68
+ & > * {
69
+ position: relative;
70
+ z-index: 1;
71
+ }
72
+ `;
73
+ const LoaderContainer = styled__default.default(designSystem.Flex)`
74
+ min-height: 400px;
75
+ align-items: center;
76
+ justify-content: center;
77
+ flex-direction: column;
78
+ gap: 16px;
79
+ `;
80
+ const LicensePage = () => {
81
+ const { get } = admin.useFetchClient();
82
+ const { toggleNotification } = admin.useNotification();
83
+ const [loading, setLoading] = react.useState(true);
84
+ const [licenseData, setLicenseData] = react.useState(null);
85
+ const [error, setError] = react.useState(null);
86
+ const fetchLicenseStatus = async () => {
87
+ setLoading(true);
88
+ setError(null);
89
+ try {
90
+ const response = await get(`/${index.pluginId}/license/status`);
91
+ setLicenseData(response.data);
92
+ } catch (err) {
93
+ console.error("[magic-sessionmanager/License] Error fetching license:", err);
94
+ setError("Failed to load license information");
95
+ } finally {
96
+ setLoading(false);
97
+ }
98
+ };
99
+ const handleCopyLicenseKey = async () => {
100
+ try {
101
+ await navigator.clipboard.writeText(licenseData?.data?.licenseKey || "");
102
+ toggleNotification({
103
+ type: "success",
104
+ message: "License key copied to clipboard!"
105
+ });
106
+ } catch (err) {
107
+ toggleNotification({
108
+ type: "danger",
109
+ message: "Failed to copy license key"
110
+ });
111
+ }
112
+ };
113
+ const handleDownloadLicenseKey = () => {
114
+ try {
115
+ const data2 = licenseData?.data || {};
116
+ const licenseKey = data2.licenseKey || "";
117
+ const email = data2.email || "N/A";
118
+ const firstName = data2.firstName || "";
119
+ const lastName = data2.lastName || "";
120
+ const fullName = `${firstName} ${lastName}`.trim() || "N/A";
121
+ const content = `Magic Session Manager - License Key
122
+ ═══════════════════════════════════════
123
+
124
+ License Key: ${licenseKey}
125
+
126
+ License Holder Information:
127
+ ──────────────────────────────────────
128
+ Name: ${fullName}
129
+ Email: ${email}
130
+
131
+ License Status:
132
+ ──────────────────────────────────────
133
+ Status: ${data2.isActive ? "ACTIVE" : "INACTIVE"}
134
+ Expires: ${data2.expiresAt ? new Date(data2.expiresAt).toLocaleDateString() : "Never"}
135
+
136
+ Features:
137
+ ──────────────────────────────────────
138
+ Premium: ${data2.features?.premium ? "Enabled" : "Disabled"}
139
+ Advanced: ${data2.features?.advanced ? "Enabled" : "Disabled"}
140
+ Enterprise: ${data2.features?.enterprise ? "Enabled" : "Disabled"}
141
+
142
+ ═══════════════════════════════════════
143
+ Generated: ${(/* @__PURE__ */ new Date()).toLocaleString()}
144
+ `;
145
+ const blob = new Blob([content], { type: "text/plain" });
146
+ const url = window.URL.createObjectURL(blob);
147
+ const link = document.createElement("a");
148
+ link.href = url;
149
+ link.download = `session-manager-license-${licenseKey.substring(0, 8)}.txt`;
150
+ document.body.appendChild(link);
151
+ link.click();
152
+ document.body.removeChild(link);
153
+ window.URL.revokeObjectURL(url);
154
+ toggleNotification({
155
+ type: "success",
156
+ message: "License key downloaded successfully!"
157
+ });
158
+ } catch (err) {
159
+ toggleNotification({
160
+ type: "danger",
161
+ message: "Failed to download license key"
162
+ });
163
+ }
164
+ };
165
+ react.useEffect(() => {
166
+ fetchLicenseStatus();
167
+ }, []);
168
+ if (loading) {
169
+ return /* @__PURE__ */ jsxRuntime.jsx(Container, { children: /* @__PURE__ */ jsxRuntime.jsx(LoaderContainer, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Loader, { children: "Loading license information..." }) }) });
170
+ }
171
+ if (error) {
172
+ 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 }) }) });
173
+ }
174
+ const isValid = licenseData?.valid;
175
+ const isDemo = licenseData?.demo;
176
+ const data = licenseData?.data || {};
177
+ return /* @__PURE__ */ jsxRuntime.jsxs(Container, { children: [
178
+ /* @__PURE__ */ jsxRuntime.jsx(StickySaveBar, { paddingTop: 5, paddingBottom: 5, paddingLeft: 6, paddingRight: 6, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { justifyContent: "space-between", alignItems: "center", children: [
179
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", gap: 1, children: [
180
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "alpha", fontWeight: "bold", children: "License Management" }),
181
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "epsilon", textColor: "neutral600", children: "View your Session Manager plugin license" })
182
+ ] }),
183
+ /* @__PURE__ */ jsxRuntime.jsx(
184
+ designSystem.Button,
185
+ {
186
+ startIcon: /* @__PURE__ */ jsxRuntime.jsx(icons.ArrowClockwise, {}),
187
+ onClick: fetchLicenseStatus,
188
+ size: "L",
189
+ style: {
190
+ background: "linear-gradient(135deg, #667eea 0%, #764ba2 100%)",
191
+ color: "white",
192
+ fontWeight: "600",
193
+ border: "none"
194
+ },
195
+ children: "Refresh Status"
196
+ }
197
+ )
198
+ ] }) }),
199
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { paddingTop: 6, paddingLeft: 6, paddingRight: 6, paddingBottom: 10, children: [
200
+ 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." }),
201
+ 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: [
202
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { style: { flex: 1 }, children: [
203
+ /* @__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" }),
204
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { style: { color: "white", fontFamily: "monospace", fontSize: "28px", fontWeight: "bold", wordBreak: "break-all", marginBottom: "16px" }, children: data.licenseKey }),
205
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
206
+ /* @__PURE__ */ jsxRuntime.jsx(
207
+ designSystem.Button,
208
+ {
209
+ onClick: handleCopyLicenseKey,
210
+ startIcon: /* @__PURE__ */ jsxRuntime.jsx(icons.Duplicate, {}),
211
+ size: "S",
212
+ variant: "secondary",
213
+ style: {
214
+ backgroundColor: "rgba(255,255,255,0.2)",
215
+ color: "white",
216
+ border: "1px solid rgba(255,255,255,0.3)",
217
+ fontWeight: "600"
218
+ },
219
+ children: "Copy Key"
220
+ }
221
+ ),
222
+ /* @__PURE__ */ jsxRuntime.jsx(
223
+ designSystem.Button,
224
+ {
225
+ onClick: handleDownloadLicenseKey,
226
+ startIcon: /* @__PURE__ */ jsxRuntime.jsx(icons.Download, {}),
227
+ size: "S",
228
+ variant: "secondary",
229
+ style: {
230
+ backgroundColor: "rgba(255,255,255,0.2)",
231
+ color: "white",
232
+ border: "1px solid rgba(255,255,255,0.3)",
233
+ fontWeight: "600"
234
+ },
235
+ children: "Download as TXT"
236
+ }
237
+ )
238
+ ] })
239
+ ] }),
240
+ /* @__PURE__ */ jsxRuntime.jsx(
241
+ designSystem.Badge,
242
+ {
243
+ backgroundColor: data.isActive ? "success100" : "danger100",
244
+ textColor: data.isActive ? "success700" : "danger700",
245
+ style: { fontSize: "11px", fontWeight: "700", padding: "6px 12px", marginLeft: "16px", flexShrink: 0 },
246
+ children: data.isActive ? "ACTIVE" : "INACTIVE"
247
+ }
248
+ )
249
+ ] }) }) }),
250
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { marginTop: 6, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Accordion.Root, { defaultValue: "account", collapsible: true, children: [
251
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Accordion.Item, { value: "account", children: [
252
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Header, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Trigger, { icon: icons.User, children: "Account Information" }) }),
253
+ /* @__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: [
254
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { style: { flex: "1", minWidth: "200px" }, children: [
255
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "sigma", textColor: "neutral600", textTransform: "uppercase", style: { marginBottom: "8px", display: "block" }, children: "Email Address" }),
256
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", fontWeight: "semiBold", children: data.email || "Not provided" })
257
+ ] }),
258
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { style: { flex: "1", minWidth: "200px" }, children: [
259
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "sigma", textColor: "neutral600", textTransform: "uppercase", style: { marginBottom: "8px", display: "block" }, children: "License Holder" }),
260
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", fontWeight: "semiBold", children: data.firstName && data.lastName ? `${data.firstName} ${data.lastName}` : "Not specified" })
261
+ ] })
262
+ ] }) }) })
263
+ ] }),
264
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Accordion.Item, { value: "details", children: [
265
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Header, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Trigger, { icon: icons.Shield, children: "License Details" }) }),
266
+ /* @__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: [
267
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { style: { flex: "1", minWidth: "180px" }, children: [
268
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "sigma", textColor: "neutral600", textTransform: "uppercase", style: { marginBottom: "8px", display: "block" }, children: data.isExpired ? "Expired On" : "Expires On" }),
269
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", fontWeight: "semiBold", children: data.expiresAt ? new Date(data.expiresAt).toLocaleDateString("en-US", {
270
+ year: "numeric",
271
+ month: "long",
272
+ day: "numeric"
273
+ }) : "Never" })
274
+ ] }),
275
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { style: { flex: "1", minWidth: "180px" }, children: [
276
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "sigma", textColor: "neutral600", textTransform: "uppercase", style: { marginBottom: "8px", display: "block" }, children: "Device Name" }),
277
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", fontWeight: "semiBold", children: data.deviceName || "Unknown" })
278
+ ] }),
279
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { style: { flex: "1", minWidth: "180px" }, children: [
280
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "sigma", textColor: "neutral600", textTransform: "uppercase", style: { marginBottom: "8px", display: "block" }, children: "IP Address" }),
281
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", fontWeight: "semiBold", children: data.ipAddress || "Not detected" })
282
+ ] })
283
+ ] }) }) })
284
+ ] }),
285
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Accordion.Item, { value: "features", children: [
286
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Header, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Trigger, { icon: icons.Sparkle, children: "Features & Capabilities" }) }),
287
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Content, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { padding: 6, children: [
288
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 3, style: { marginBottom: "32px" }, children: [
289
+ /* @__PURE__ */ jsxRuntime.jsxs(
290
+ designSystem.Badge,
291
+ {
292
+ backgroundColor: data.features?.premium ? "success100" : "neutral100",
293
+ textColor: data.features?.premium ? "success700" : "neutral600",
294
+ style: {
295
+ fontSize: "13px",
296
+ fontWeight: "700",
297
+ padding: "8px 16px",
298
+ border: data.features?.premium ? "2px solid #dcfce7" : "2px solid #e5e7eb"
299
+ },
300
+ children: [
301
+ data.features?.premium ? "✓" : "✗",
302
+ " PREMIUM FEATURES"
303
+ ]
304
+ }
305
+ ),
306
+ /* @__PURE__ */ jsxRuntime.jsxs(
307
+ designSystem.Badge,
308
+ {
309
+ backgroundColor: data.features?.advanced ? "primary100" : "neutral100",
310
+ textColor: data.features?.advanced ? "primary700" : "neutral600",
311
+ style: {
312
+ fontSize: "13px",
313
+ fontWeight: "700",
314
+ padding: "8px 16px",
315
+ border: data.features?.advanced ? "2px solid #bae6fd" : "2px solid #e5e7eb"
316
+ },
317
+ children: [
318
+ data.features?.advanced ? "✓" : "✗",
319
+ " ADVANCED FEATURES"
320
+ ]
321
+ }
322
+ ),
323
+ /* @__PURE__ */ jsxRuntime.jsxs(
324
+ designSystem.Badge,
325
+ {
326
+ backgroundColor: data.features?.enterprise ? "secondary100" : "neutral100",
327
+ textColor: data.features?.enterprise ? "secondary700" : "neutral600",
328
+ style: {
329
+ fontSize: "13px",
330
+ fontWeight: "700",
331
+ padding: "8px 16px",
332
+ border: data.features?.enterprise ? "2px solid #ddd6fe" : "2px solid #e5e7eb"
333
+ },
334
+ children: [
335
+ data.features?.enterprise ? "✓" : "✗",
336
+ " ENTERPRISE FEATURES"
337
+ ]
338
+ }
339
+ )
340
+ ] }),
341
+ data.features?.premium && /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { marginBottom: 5, padding: 5, background: "success50", hasRadius: true, style: { border: "2px solid #dcfce7" }, children: [
342
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "delta", fontWeight: "bold", textColor: "success700", style: { marginBottom: "16px", display: "flex", alignItems: "center", gap: "8px" }, children: "✨ Premium Features Active" }),
343
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", gap: 2, children: [
344
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", textColor: "success700", style: { fontSize: "14px", display: "flex", alignItems: "center", gap: "8px" }, children: "✓ IP Geolocation Tracking (Country, City, Timezone)" }),
345
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", textColor: "success700", style: { fontSize: "14px", display: "flex", alignItems: "center", gap: "8px" }, children: "✓ Security Risk Scoring (0-100)" }),
346
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", textColor: "success700", style: { fontSize: "14px", display: "flex", alignItems: "center", gap: "8px" }, children: "✓ VPN Detection" }),
347
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", textColor: "success700", style: { fontSize: "14px", display: "flex", alignItems: "center", gap: "8px" }, children: "✓ Proxy Detection" }),
348
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", textColor: "success700", style: { fontSize: "14px", display: "flex", alignItems: "center", gap: "8px" }, children: "✓ Threat Analysis" }),
349
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", textColor: "success700", style: { fontSize: "14px", display: "flex", alignItems: "center", gap: "8px" }, children: "✓ Advanced Session Analytics" })
350
+ ] })
351
+ ] }),
352
+ data.features?.advanced && /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { marginBottom: 5, padding: 5, background: "primary50", hasRadius: true, style: { border: "2px solid #bae6fd" }, children: [
353
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "delta", fontWeight: "bold", textColor: "primary700", style: { marginBottom: "16px", display: "flex", alignItems: "center", gap: "8px" }, children: "🚀 Advanced Features Active" }),
354
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", gap: 2, children: [
355
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", textColor: "primary700", style: { fontSize: "14px", display: "flex", alignItems: "center", gap: "8px" }, children: "✓ Email Notifications & Alerts" }),
356
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", textColor: "primary700", style: { fontSize: "14px", display: "flex", alignItems: "center", gap: "8px" }, children: "✓ Webhook Integration (Discord/Slack)" }),
357
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", textColor: "primary700", style: { fontSize: "14px", display: "flex", alignItems: "center", gap: "8px" }, children: "✓ Auto-blocking Suspicious Sessions" }),
358
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", textColor: "primary700", style: { fontSize: "14px", display: "flex", alignItems: "center", gap: "8px" }, children: "✓ Geo-fencing (Country-based Access Control)" }),
359
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", textColor: "primary700", style: { fontSize: "14px", display: "flex", alignItems: "center", gap: "8px" }, children: "✓ Enhanced Analytics Dashboard" })
360
+ ] })
361
+ ] }),
362
+ data.features?.enterprise && /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { padding: 5, background: "secondary50", hasRadius: true, style: { border: "2px solid #ddd6fe" }, children: [
363
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "delta", fontWeight: "bold", textColor: "secondary700", style: { marginBottom: "16px", display: "flex", alignItems: "center", gap: "8px" }, children: "🏢 Enterprise Features Active" }),
364
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", gap: 2, children: [
365
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", textColor: "secondary700", style: { fontSize: "14px", display: "flex", alignItems: "center", gap: "8px" }, children: "✓ Multi-tenant Support" }),
366
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", textColor: "secondary700", style: { fontSize: "14px", display: "flex", alignItems: "center", gap: "8px" }, children: "✓ Compliance Reports (GDPR, SOC2)" }),
367
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", textColor: "secondary700", style: { fontSize: "14px", display: "flex", alignItems: "center", gap: "8px" }, children: "✓ Custom Security Rules Engine" }),
368
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", textColor: "secondary700", style: { fontSize: "14px", display: "flex", alignItems: "center", gap: "8px" }, children: "✓ ML-based Anomaly Detection" }),
369
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", textColor: "secondary700", style: { fontSize: "14px", display: "flex", alignItems: "center", gap: "8px" }, children: "✓ Priority Support" })
370
+ ] })
371
+ ] })
372
+ ] }) })
373
+ ] }),
374
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Accordion.Item, { value: "status", children: [
375
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Header, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Trigger, { icon: icons.ChartBubble, children: "System Status" }) }),
376
+ /* @__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: [
377
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { style: { flex: "1", minWidth: "150px" }, children: [
378
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "sigma", textColor: "neutral600", textTransform: "uppercase", style: { marginBottom: "8px", display: "block" }, children: "License Status" }),
379
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", fontWeight: "semiBold", children: data.isActive ? "Active" : "Inactive" })
380
+ ] }),
381
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { style: { flex: "1", minWidth: "150px" }, children: [
382
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "sigma", textColor: "neutral600", textTransform: "uppercase", style: { marginBottom: "8px", display: "block" }, children: "Connection" }),
383
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", fontWeight: "semiBold", children: data.isOnline ? "Online" : "Offline" })
384
+ ] }),
385
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { style: { flex: "1", minWidth: "150px" }, children: [
386
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "sigma", textColor: "neutral600", textTransform: "uppercase", style: { marginBottom: "8px", display: "block" }, children: "Last Sync" }),
387
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", fontWeight: "semiBold", children: data.lastPingAt ? new Date(data.lastPingAt).toLocaleTimeString() : "Never" })
388
+ ] }),
389
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { style: { flex: "1", minWidth: "150px" }, children: [
390
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "sigma", textColor: "neutral600", textTransform: "uppercase", style: { marginBottom: "8px", display: "block" }, children: "Device Limit" }),
391
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Typography, { variant: "omega", fontWeight: "semiBold", children: [
392
+ data.currentDevices || 0,
393
+ " / ",
394
+ data.maxDevices || 1
395
+ ] })
396
+ ] })
397
+ ] }) }) })
398
+ ] })
399
+ ] }) })
400
+ ] })
401
+ ] });
402
+ };
403
+ exports.default = LicensePage;