@replicated/portal-components 0.0.11 → 0.0.12
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.
- package/components/metadata/registry.json +2 -2
- package/components/metadata/registry.md +2 -2
- package/datadog/tracer.d.ts +3 -0
- package/datadog/tracer.js +82 -0
- package/datadog/tracer.ts +101 -0
- package/dist/esm/index.js +91 -64
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/install-card.js +8 -21
- package/dist/esm/install-card.js.map +1 -1
- package/dist/esm/license-card.js +8 -12
- package/dist/esm/license-card.js.map +1 -1
- package/dist/esm/license-details.js +1 -1
- package/dist/esm/license-details.js.map +1 -1
- package/dist/esm/support-card.js +4 -6
- package/dist/esm/support-card.js.map +1 -1
- package/dist/esm/team-settings-card.js +8 -13
- package/dist/esm/team-settings-card.js.map +1 -1
- package/dist/esm/top-nav.js +69 -29
- package/dist/esm/top-nav.js.map +1 -1
- package/dist/esm/update-layout.js +69 -29
- package/dist/esm/update-layout.js.map +1 -1
- package/dist/esm/updates-card.js +8 -14
- package/dist/esm/updates-card.js.map +1 -1
- package/dist/esm/utils/observability/index.js +193 -0
- package/dist/esm/utils/observability/index.js.map +1 -0
- package/dist/index.js +91 -64
- package/dist/index.js.map +1 -1
- package/dist/install-card.js +8 -21
- package/dist/install-card.js.map +1 -1
- package/dist/license-card.js +8 -12
- package/dist/license-card.js.map +1 -1
- package/dist/license-details.js +1 -1
- package/dist/license-details.js.map +1 -1
- package/dist/styles.css +2 -2
- package/dist/support-card.js +4 -6
- package/dist/support-card.js.map +1 -1
- package/dist/team-settings-card.js +8 -13
- package/dist/team-settings-card.js.map +1 -1
- package/dist/top-nav.js +69 -29
- package/dist/top-nav.js.map +1 -1
- package/dist/update-layout.js +69 -29
- package/dist/update-layout.js.map +1 -1
- package/dist/updates-card.js +8 -14
- package/dist/updates-card.js.map +1 -1
- package/dist/utils/observability/index.d.mts +13 -0
- package/dist/utils/observability/index.d.ts +13 -0
- package/dist/utils/observability/index.js +198 -0
- package/dist/utils/observability/index.js.map +1 -0
- package/instrumentation.d.ts +8 -0
- package/instrumentation.js +22 -0
- package/package.json +16 -3
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
const rawFlag = String(process.env.USE_DATADOG_APM || '').toLowerCase();
|
|
2
|
+
const isEnabled = rawFlag === 'true';
|
|
3
|
+
process.env.DD_TRACE_ENABLED = isEnabled ? '1' : '0';
|
|
4
|
+
let tracer = null;
|
|
5
|
+
if (isEnabled) {
|
|
6
|
+
const serviceName = process.env.DD_SERVICE || 'enterprise-portal';
|
|
7
|
+
const environment = process.env.DD_ENV || process.env.NODE_ENV || 'development';
|
|
8
|
+
const version = process.env.DD_VERSION || process.env.NEXT_PUBLIC_VERSION || '0.0.0-dev';
|
|
9
|
+
const agentHost = process.env.DD_AGENT_HOST || process.env.DATADOG_AGENT_HOST || '127.0.0.1';
|
|
10
|
+
const agentPort = process.env.DD_TRACE_AGENT_PORT || '8126';
|
|
11
|
+
process.env.DD_SERVICE = serviceName;
|
|
12
|
+
process.env.DD_ENV = environment;
|
|
13
|
+
if (version) {
|
|
14
|
+
process.env.DD_VERSION = version;
|
|
15
|
+
}
|
|
16
|
+
process.env.DD_AGENT_HOST = agentHost;
|
|
17
|
+
process.env.DD_TRACE_AGENT_PORT = agentPort;
|
|
18
|
+
const dbmPropagationMode = (process.env.DD_DBM_PROPAGATION_MODE || 'full');
|
|
19
|
+
process.env.DD_DBM_PROPAGATION_MODE = dbmPropagationMode;
|
|
20
|
+
try {
|
|
21
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
22
|
+
const ddTrace = require('dd-trace');
|
|
23
|
+
tracer = ddTrace.init({
|
|
24
|
+
service: serviceName,
|
|
25
|
+
env: environment,
|
|
26
|
+
version,
|
|
27
|
+
logInjection: true,
|
|
28
|
+
runtimeMetrics: true,
|
|
29
|
+
appsec: false,
|
|
30
|
+
profiling: false,
|
|
31
|
+
startupLogs: true, // Enable for debugging
|
|
32
|
+
});
|
|
33
|
+
console.log(`[datadog] Tracer initialized: service=${serviceName}, env=${environment}, version=${version}, agent=${agentHost}:${agentPort}`);
|
|
34
|
+
// Disable low-level network instrumentation for localhost connections
|
|
35
|
+
tracer.use('dns', false);
|
|
36
|
+
tracer.use('net', false);
|
|
37
|
+
// Configure http plugin to normalize route patterns
|
|
38
|
+
tracer.use('http', {
|
|
39
|
+
server: {
|
|
40
|
+
hooks: {
|
|
41
|
+
request: (span, req) => {
|
|
42
|
+
if (!span)
|
|
43
|
+
return;
|
|
44
|
+
const url = req?.url || '';
|
|
45
|
+
const method = req?.method || 'GET';
|
|
46
|
+
const path = url.split('?')[0];
|
|
47
|
+
// Drop Next.js internal requests
|
|
48
|
+
if (path.startsWith('/_next/')) {
|
|
49
|
+
// @ts-expect-error - using internal property to drop the trace
|
|
50
|
+
span.context()._trace.isRecording = false;
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const routePattern = getRoutePattern(path);
|
|
54
|
+
span.setTag('resource.name', `${method} ${routePattern}`);
|
|
55
|
+
span.setTag('http.route', routePattern);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
// Do not crash the app if tracing fails to initialize
|
|
63
|
+
console.error('[datadog] failed to initialize tracing', err);
|
|
64
|
+
tracer = null;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// Function to convert actual paths to route patterns
|
|
68
|
+
const getRoutePattern = (path) => {
|
|
69
|
+
// Define route patterns for dynamic routes in enterprise portal
|
|
70
|
+
const routePatterns = [
|
|
71
|
+
// Update instance routes - normalize dynamic segments (capture suffix to preserve sub-routes)
|
|
72
|
+
{ pattern: /^\/update\/instance\/[^/]+(.*)$/, replacement: '/update/instance/[instanceId]$1' },
|
|
73
|
+
];
|
|
74
|
+
for (const { pattern, replacement } of routePatterns) {
|
|
75
|
+
if (pattern.test(path)) {
|
|
76
|
+
return path.replace(pattern, replacement);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// Return original path if no pattern matches
|
|
80
|
+
return path;
|
|
81
|
+
};
|
|
82
|
+
export default tracer;
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import type { Tracer, Span, init as ddTraceInit } from 'dd-trace';
|
|
2
|
+
import type { IncomingMessage } from 'http';
|
|
3
|
+
|
|
4
|
+
const rawFlag = String(process.env.USE_DATADOG_APM || '').toLowerCase();
|
|
5
|
+
const isEnabled = rawFlag === 'true';
|
|
6
|
+
|
|
7
|
+
process.env.DD_TRACE_ENABLED = isEnabled ? '1' : '0';
|
|
8
|
+
|
|
9
|
+
let tracer: Tracer | null = null;
|
|
10
|
+
|
|
11
|
+
if (isEnabled) {
|
|
12
|
+
const serviceName = process.env.DD_SERVICE || 'enterprise-portal';
|
|
13
|
+
const environment = process.env.DD_ENV || process.env.NODE_ENV || 'development';
|
|
14
|
+
const version = process.env.DD_VERSION || process.env.NEXT_PUBLIC_VERSION || '0.0.0-dev';
|
|
15
|
+
|
|
16
|
+
const agentHost = process.env.DD_AGENT_HOST || process.env.DATADOG_AGENT_HOST || '127.0.0.1';
|
|
17
|
+
const agentPort = process.env.DD_TRACE_AGENT_PORT || '8126';
|
|
18
|
+
|
|
19
|
+
process.env.DD_SERVICE = serviceName;
|
|
20
|
+
process.env.DD_ENV = environment;
|
|
21
|
+
if (version) {
|
|
22
|
+
process.env.DD_VERSION = version;
|
|
23
|
+
}
|
|
24
|
+
process.env.DD_AGENT_HOST = agentHost;
|
|
25
|
+
process.env.DD_TRACE_AGENT_PORT = agentPort;
|
|
26
|
+
|
|
27
|
+
const dbmPropagationMode = (process.env.DD_DBM_PROPAGATION_MODE || 'full') as 'disabled' | 'service' | 'full';
|
|
28
|
+
|
|
29
|
+
process.env.DD_DBM_PROPAGATION_MODE = dbmPropagationMode;
|
|
30
|
+
|
|
31
|
+
try {
|
|
32
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
33
|
+
const ddTrace = require('dd-trace');
|
|
34
|
+
tracer = (ddTrace.init as typeof ddTraceInit)({
|
|
35
|
+
service: serviceName,
|
|
36
|
+
env: environment,
|
|
37
|
+
version,
|
|
38
|
+
logInjection: true,
|
|
39
|
+
runtimeMetrics: true,
|
|
40
|
+
appsec: false,
|
|
41
|
+
profiling: false,
|
|
42
|
+
startupLogs: true, // Enable for debugging
|
|
43
|
+
}) as Tracer;
|
|
44
|
+
|
|
45
|
+
console.log(`[datadog] Tracer initialized: service=${serviceName}, env=${environment}, version=${version}, agent=${agentHost}:${agentPort}`);
|
|
46
|
+
|
|
47
|
+
// Disable low-level network instrumentation for localhost connections
|
|
48
|
+
tracer.use('dns', false);
|
|
49
|
+
tracer.use('net', false);
|
|
50
|
+
// Configure http plugin to normalize route patterns
|
|
51
|
+
tracer.use('http', {
|
|
52
|
+
server: {
|
|
53
|
+
hooks: {
|
|
54
|
+
request: (span?: Span, req?: IncomingMessage) => {
|
|
55
|
+
if (!span) return;
|
|
56
|
+
|
|
57
|
+
const url = req?.url || '';
|
|
58
|
+
const method = req?.method || 'GET';
|
|
59
|
+
const path = url.split('?')[0];
|
|
60
|
+
|
|
61
|
+
// Drop Next.js internal requests
|
|
62
|
+
if (path.startsWith('/_next/')) {
|
|
63
|
+
// @ts-expect-error - using internal property to drop the trace
|
|
64
|
+
span.context()._trace.isRecording = false;
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const routePattern = getRoutePattern(path);
|
|
69
|
+
|
|
70
|
+
span.setTag('resource.name', `${method} ${routePattern}`);
|
|
71
|
+
span.setTag('http.route', routePattern);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
} catch (err) {
|
|
77
|
+
// Do not crash the app if tracing fails to initialize
|
|
78
|
+
console.error('[datadog] failed to initialize tracing', err);
|
|
79
|
+
tracer = null;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Function to convert actual paths to route patterns
|
|
84
|
+
const getRoutePattern = (path: string): string => {
|
|
85
|
+
// Define route patterns for dynamic routes in enterprise portal
|
|
86
|
+
const routePatterns = [
|
|
87
|
+
// Update instance routes - normalize dynamic segments (capture suffix to preserve sub-routes)
|
|
88
|
+
{ pattern: /^\/update\/instance\/[^/]+(.*)$/, replacement: '/update/instance/[instanceId]$1' },
|
|
89
|
+
];
|
|
90
|
+
|
|
91
|
+
for (const { pattern, replacement } of routePatterns) {
|
|
92
|
+
if (pattern.test(path)) {
|
|
93
|
+
return path.replace(pattern, replacement);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Return original path if no pattern matches
|
|
98
|
+
return path;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export default tracer;
|
package/dist/esm/index.js
CHANGED
|
@@ -10,7 +10,7 @@ import Link from 'next/link';
|
|
|
10
10
|
|
|
11
11
|
// package.json
|
|
12
12
|
var package_default = {
|
|
13
|
-
version: "0.0.
|
|
13
|
+
version: "0.0.12"};
|
|
14
14
|
|
|
15
15
|
// src/tokens/index.ts
|
|
16
16
|
var baseTokens = {
|
|
@@ -1447,7 +1447,7 @@ var LicenseDetails = async ({
|
|
|
1447
1447
|
console.debug("[portal-components] license response", response.raw);
|
|
1448
1448
|
const { license } = response;
|
|
1449
1449
|
const rows = buildPrimaryRows(license);
|
|
1450
|
-
return /* @__PURE__ */ jsxs("div", { className: "rounded
|
|
1450
|
+
return /* @__PURE__ */ jsxs("div", { className: "rounded border border-gray-100 bg-white p-8 shadow-[0_18px_45px_rgba(17,24,39,0.08)]", children: [
|
|
1451
1451
|
/* @__PURE__ */ jsxs("header", { className: "flex flex-col border-b border-gray-100 pb-6", children: [
|
|
1452
1452
|
/* @__PURE__ */ jsx("h1", { className: "text-3xl font-bold text-gray-900", children: title }),
|
|
1453
1453
|
description ? /* @__PURE__ */ jsx("p", { className: "mt-2 text-sm text-gray-600", children: description }) : null
|
|
@@ -1474,10 +1474,14 @@ var defaultTopNavLinks = [
|
|
|
1474
1474
|
className: "h-4 w-4",
|
|
1475
1475
|
fill: "none",
|
|
1476
1476
|
stroke: "currentColor",
|
|
1477
|
-
strokeWidth: "
|
|
1477
|
+
strokeWidth: "2",
|
|
1478
|
+
strokeLinecap: "round",
|
|
1479
|
+
strokeLinejoin: "round",
|
|
1478
1480
|
children: [
|
|
1479
|
-
/* @__PURE__ */ jsx("
|
|
1480
|
-
/* @__PURE__ */ jsx("
|
|
1481
|
+
/* @__PURE__ */ jsx("rect", { width: "7", height: "9", x: "3", y: "3", rx: "1" }),
|
|
1482
|
+
/* @__PURE__ */ jsx("rect", { width: "7", height: "5", x: "14", y: "3", rx: "1" }),
|
|
1483
|
+
/* @__PURE__ */ jsx("rect", { width: "7", height: "9", x: "14", y: "12", rx: "1" }),
|
|
1484
|
+
/* @__PURE__ */ jsx("rect", { width: "7", height: "5", x: "3", y: "16", rx: "1" })
|
|
1481
1485
|
]
|
|
1482
1486
|
}
|
|
1483
1487
|
)
|
|
@@ -1492,11 +1496,13 @@ var defaultTopNavLinks = [
|
|
|
1492
1496
|
className: "h-4 w-4",
|
|
1493
1497
|
fill: "none",
|
|
1494
1498
|
stroke: "currentColor",
|
|
1495
|
-
strokeWidth: "
|
|
1499
|
+
strokeWidth: "2",
|
|
1500
|
+
strokeLinecap: "round",
|
|
1501
|
+
strokeLinejoin: "round",
|
|
1496
1502
|
children: [
|
|
1497
|
-
/* @__PURE__ */ jsx("path", { d: "
|
|
1498
|
-
/* @__PURE__ */ jsx("
|
|
1499
|
-
/* @__PURE__ */ jsx("
|
|
1503
|
+
/* @__PURE__ */ jsx("path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" }),
|
|
1504
|
+
/* @__PURE__ */ jsx("polyline", { points: "7 10 12 15 17 10" }),
|
|
1505
|
+
/* @__PURE__ */ jsx("line", { x1: "12", x2: "12", y1: "15", y2: "3" })
|
|
1500
1506
|
]
|
|
1501
1507
|
}
|
|
1502
1508
|
)
|
|
@@ -1512,10 +1518,13 @@ var defaultTopNavLinks = [
|
|
|
1512
1518
|
className: "h-4 w-4",
|
|
1513
1519
|
fill: "none",
|
|
1514
1520
|
stroke: "currentColor",
|
|
1515
|
-
strokeWidth: "
|
|
1521
|
+
strokeWidth: "2",
|
|
1522
|
+
strokeLinecap: "round",
|
|
1523
|
+
strokeLinejoin: "round",
|
|
1516
1524
|
children: [
|
|
1517
|
-
/* @__PURE__ */ jsx("path", { d: "
|
|
1518
|
-
/* @__PURE__ */ jsx("
|
|
1525
|
+
/* @__PURE__ */ jsx("path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" }),
|
|
1526
|
+
/* @__PURE__ */ jsx("polyline", { points: "7 10 12 15 17 10" }),
|
|
1527
|
+
/* @__PURE__ */ jsx("line", { x1: "12", x2: "12", y1: "15", y2: "3" })
|
|
1519
1528
|
]
|
|
1520
1529
|
}
|
|
1521
1530
|
)
|
|
@@ -1531,15 +1540,34 @@ var defaultTopNavLinks = [
|
|
|
1531
1540
|
className: "h-4 w-4",
|
|
1532
1541
|
fill: "none",
|
|
1533
1542
|
stroke: "currentColor",
|
|
1534
|
-
strokeWidth: "
|
|
1543
|
+
strokeWidth: "2",
|
|
1544
|
+
strokeLinecap: "round",
|
|
1545
|
+
strokeLinejoin: "round",
|
|
1535
1546
|
children: [
|
|
1536
|
-
/* @__PURE__ */ jsx("path", { d: "
|
|
1537
|
-
/* @__PURE__ */ jsx("path", { d: "
|
|
1538
|
-
/* @__PURE__ */ jsx("path", { d: "M4 10c1.5-4 6-6 10-4m6 4c-1.5 4-6 6-10 4" })
|
|
1547
|
+
/* @__PURE__ */ jsx("path", { d: "M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8" }),
|
|
1548
|
+
/* @__PURE__ */ jsx("path", { d: "M21 3v5h-5" })
|
|
1539
1549
|
]
|
|
1540
1550
|
}
|
|
1541
1551
|
)
|
|
1542
1552
|
},
|
|
1553
|
+
{
|
|
1554
|
+
label: "Security",
|
|
1555
|
+
href: "/security",
|
|
1556
|
+
icon: /* @__PURE__ */ jsx(
|
|
1557
|
+
"svg",
|
|
1558
|
+
{
|
|
1559
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
1560
|
+
viewBox: "0 0 24 24",
|
|
1561
|
+
className: "h-4 w-4",
|
|
1562
|
+
fill: "none",
|
|
1563
|
+
stroke: "currentColor",
|
|
1564
|
+
strokeWidth: "2",
|
|
1565
|
+
strokeLinecap: "round",
|
|
1566
|
+
strokeLinejoin: "round",
|
|
1567
|
+
children: /* @__PURE__ */ jsx("path", { d: "M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z" })
|
|
1568
|
+
}
|
|
1569
|
+
)
|
|
1570
|
+
},
|
|
1543
1571
|
{
|
|
1544
1572
|
label: "Release History",
|
|
1545
1573
|
href: "/release-history",
|
|
@@ -1551,10 +1579,15 @@ var defaultTopNavLinks = [
|
|
|
1551
1579
|
className: "h-4 w-4",
|
|
1552
1580
|
fill: "none",
|
|
1553
1581
|
stroke: "currentColor",
|
|
1554
|
-
strokeWidth: "
|
|
1582
|
+
strokeWidth: "2",
|
|
1583
|
+
strokeLinecap: "round",
|
|
1584
|
+
strokeLinejoin: "round",
|
|
1555
1585
|
children: [
|
|
1556
|
-
/* @__PURE__ */ jsx("path", { d: "
|
|
1557
|
-
/* @__PURE__ */ jsx("
|
|
1586
|
+
/* @__PURE__ */ jsx("path", { d: "M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z" }),
|
|
1587
|
+
/* @__PURE__ */ jsx("path", { d: "M14 2v4a2 2 0 0 0 2 2h4" }),
|
|
1588
|
+
/* @__PURE__ */ jsx("path", { d: "M10 9H8" }),
|
|
1589
|
+
/* @__PURE__ */ jsx("path", { d: "M16 13H8" }),
|
|
1590
|
+
/* @__PURE__ */ jsx("path", { d: "M16 17H8" })
|
|
1558
1591
|
]
|
|
1559
1592
|
}
|
|
1560
1593
|
)
|
|
@@ -1570,12 +1603,13 @@ var defaultTopNavLinks = [
|
|
|
1570
1603
|
className: "h-4 w-4",
|
|
1571
1604
|
fill: "none",
|
|
1572
1605
|
stroke: "currentColor",
|
|
1573
|
-
strokeWidth: "
|
|
1606
|
+
strokeWidth: "2",
|
|
1607
|
+
strokeLinecap: "round",
|
|
1608
|
+
strokeLinejoin: "round",
|
|
1574
1609
|
children: [
|
|
1575
|
-
/* @__PURE__ */ jsx("
|
|
1576
|
-
/* @__PURE__ */ jsx("path", { d: "
|
|
1577
|
-
/* @__PURE__ */ jsx("
|
|
1578
|
-
/* @__PURE__ */ jsx("path", { d: "M9 15h6" })
|
|
1610
|
+
/* @__PURE__ */ jsx("path", { d: "m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4" }),
|
|
1611
|
+
/* @__PURE__ */ jsx("path", { d: "m21 2-9.6 9.6" }),
|
|
1612
|
+
/* @__PURE__ */ jsx("circle", { cx: "7.5", cy: "15.5", r: "5.5" })
|
|
1579
1613
|
]
|
|
1580
1614
|
}
|
|
1581
1615
|
)
|
|
@@ -1591,10 +1625,16 @@ var defaultTopNavLinks = [
|
|
|
1591
1625
|
className: "h-4 w-4",
|
|
1592
1626
|
fill: "none",
|
|
1593
1627
|
stroke: "currentColor",
|
|
1594
|
-
strokeWidth: "
|
|
1628
|
+
strokeWidth: "2",
|
|
1629
|
+
strokeLinecap: "round",
|
|
1630
|
+
strokeLinejoin: "round",
|
|
1595
1631
|
children: [
|
|
1596
|
-
/* @__PURE__ */ jsx("
|
|
1597
|
-
/* @__PURE__ */ jsx("
|
|
1632
|
+
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10" }),
|
|
1633
|
+
/* @__PURE__ */ jsx("path", { d: "m4.93 4.93 4.24 4.24" }),
|
|
1634
|
+
/* @__PURE__ */ jsx("path", { d: "m14.83 9.17 4.24-4.24" }),
|
|
1635
|
+
/* @__PURE__ */ jsx("path", { d: "m14.83 14.83 4.24 4.24" }),
|
|
1636
|
+
/* @__PURE__ */ jsx("path", { d: "m9.17 14.83-4.24 4.24" }),
|
|
1637
|
+
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "4" })
|
|
1598
1638
|
]
|
|
1599
1639
|
}
|
|
1600
1640
|
)
|
|
@@ -1694,7 +1734,7 @@ var TopNav = async ({
|
|
|
1694
1734
|
return /* @__PURE__ */ jsx(
|
|
1695
1735
|
"div",
|
|
1696
1736
|
{
|
|
1697
|
-
className: "relative flex h-[
|
|
1737
|
+
className: "relative flex h-[280px] w-full items-start justify-center",
|
|
1698
1738
|
style: {
|
|
1699
1739
|
backgroundImage: `linear-gradient(to top, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0) 33%), linear-gradient(${gradientStart}, ${gradientEnd})`,
|
|
1700
1740
|
backgroundRepeat: "no-repeat",
|
|
@@ -1721,7 +1761,7 @@ var TopNav = async ({
|
|
|
1721
1761
|
brandTitle ? /* @__PURE__ */ jsx("span", { className: "text-lg font-semibold text-gray-900", children: brandTitle }) : null
|
|
1722
1762
|
] }) : /* @__PURE__ */ jsx("div", {}),
|
|
1723
1763
|
/* @__PURE__ */ jsxs("details", { className: "group relative", children: [
|
|
1724
|
-
/* @__PURE__ */ jsxs("summary", { className: "flex cursor-pointer items-center gap-2
|
|
1764
|
+
/* @__PURE__ */ jsxs("summary", { className: "flex cursor-pointer items-center gap-2 text-sm font-medium text-gray-600 hover:text-gray-900 list-none", children: [
|
|
1725
1765
|
/* @__PURE__ */ jsxs(
|
|
1726
1766
|
"svg",
|
|
1727
1767
|
{
|
|
@@ -1793,12 +1833,12 @@ var TopNav = async ({
|
|
|
1793
1833
|
const className = `flex items-center gap-2 px-4 py-1 transition text-gray-500 ${isActive ? "underline underline-offset-8 decoration-2" : ""}`;
|
|
1794
1834
|
if (href) {
|
|
1795
1835
|
return /* @__PURE__ */ jsxs(Link, { href, className, children: [
|
|
1796
|
-
/* @__PURE__ */ jsx("span", { className: isActive ? "text-
|
|
1836
|
+
/* @__PURE__ */ jsx("span", { className: isActive ? "text-gray-900" : "text-gray-500", children: icon }),
|
|
1797
1837
|
/* @__PURE__ */ jsx("span", { children: label })
|
|
1798
1838
|
] }, label);
|
|
1799
1839
|
}
|
|
1800
1840
|
return /* @__PURE__ */ jsxs("button", { className, type: "button", children: [
|
|
1801
|
-
/* @__PURE__ */ jsx("span", { className: isActive ? "text-
|
|
1841
|
+
/* @__PURE__ */ jsx("span", { className: isActive ? "text-gray-900" : "text-gray-500", children: icon }),
|
|
1802
1842
|
/* @__PURE__ */ jsx("span", { children: label })
|
|
1803
1843
|
] }, label);
|
|
1804
1844
|
}) })
|
|
@@ -1806,7 +1846,7 @@ var TopNav = async ({
|
|
|
1806
1846
|
}
|
|
1807
1847
|
);
|
|
1808
1848
|
};
|
|
1809
|
-
var GlobeIcon = (props) => /* @__PURE__ */
|
|
1849
|
+
var GlobeIcon = (props) => /* @__PURE__ */ jsx(
|
|
1810
1850
|
"svg",
|
|
1811
1851
|
{
|
|
1812
1852
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -1814,16 +1854,14 @@ var GlobeIcon = (props) => /* @__PURE__ */ jsxs(
|
|
|
1814
1854
|
fill: "none",
|
|
1815
1855
|
stroke: "currentColor",
|
|
1816
1856
|
strokeWidth: 1.5,
|
|
1857
|
+
strokeLinecap: "round",
|
|
1858
|
+
strokeLinejoin: "round",
|
|
1817
1859
|
"aria-hidden": "true",
|
|
1818
1860
|
...props,
|
|
1819
|
-
children:
|
|
1820
|
-
/* @__PURE__ */ jsx("circle", { cx: 12, cy: 12, r: 10 }),
|
|
1821
|
-
/* @__PURE__ */ jsx("path", { d: "M2 12h20" }),
|
|
1822
|
-
/* @__PURE__ */ jsx("path", { d: "M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10Z" })
|
|
1823
|
-
]
|
|
1861
|
+
children: /* @__PURE__ */ jsx("path", { d: "M12 21a9.004 9.004 0 008.716-6.747M12 21a9.004 9.004 0 01-8.716-6.747M12 21c2.485 0 4.5-4.03 4.5-9S14.485 3 12 3m0 18c-2.485 0-4.5-4.03-4.5-9S9.515 3 12 3m0 0a8.997 8.997 0 017.843 4.582M12 3a8.997 8.997 0 00-7.843 4.582m15.686 0A11.953 11.953 0 0112 10.5c-2.998 0-5.74-1.1-7.843-2.918m15.686 0A8.959 8.959 0 0121 12c0 .778-.099 1.533-.284 2.253m0 0A17.919 17.919 0 0112 16.5c-3.162 0-6.133-.815-8.716-2.247m0 0A9.015 9.015 0 013 12c0-1.605.42-3.113 1.157-4.418" })
|
|
1824
1862
|
}
|
|
1825
1863
|
);
|
|
1826
|
-
var AirGapIcon = (props) => /* @__PURE__ */
|
|
1864
|
+
var AirGapIcon = (props) => /* @__PURE__ */ jsx(
|
|
1827
1865
|
"svg",
|
|
1828
1866
|
{
|
|
1829
1867
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -1831,15 +1869,11 @@ var AirGapIcon = (props) => /* @__PURE__ */ jsxs(
|
|
|
1831
1869
|
fill: "none",
|
|
1832
1870
|
stroke: "currentColor",
|
|
1833
1871
|
strokeWidth: 1.5,
|
|
1872
|
+
strokeLinecap: "round",
|
|
1873
|
+
strokeLinejoin: "round",
|
|
1834
1874
|
"aria-hidden": "true",
|
|
1835
1875
|
...props,
|
|
1836
|
-
children:
|
|
1837
|
-
/* @__PURE__ */ jsx("path", { d: "m4 4 16 16" }),
|
|
1838
|
-
/* @__PURE__ */ jsx("path", { d: "M7.5 4.5a8 8 0 0 1 9 0" }),
|
|
1839
|
-
/* @__PURE__ */ jsx("path", { d: "M4.5 7.5a8 8 0 0 0 0 9" }),
|
|
1840
|
-
/* @__PURE__ */ jsx("path", { d: "M16.5 19.5a8 8 0 0 0 0-9" }),
|
|
1841
|
-
/* @__PURE__ */ jsx("path", { d: "M7 12a5 5 0 0 0 5 5" })
|
|
1842
|
-
]
|
|
1876
|
+
children: /* @__PURE__ */ jsx("path", { d: "M13.181 8.68a4.503 4.503 0 0 1 1.903 6.405m-9.768-2.782L3.56 14.06a4.5 4.5 0 0 0 6.364 6.365l3.129-3.129m5.614-5.615 1.757-1.757a4.5 4.5 0 0 0-6.364-6.365l-4.5 4.5c-.258.26-.479.541-.661.84m1.903 6.405a4.495 4.495 0 0 1-1.242-.88 4.483 4.483 0 0 1-1.062-1.683m6.587 2.345 5.907 5.907m-5.907-5.907L8.898 8.898M2.991 2.99 8.898 8.9" })
|
|
1843
1877
|
}
|
|
1844
1878
|
);
|
|
1845
1879
|
var baseCardClass = "flex h-full flex-col rounded-xl border border-gray-200 bg-white p-6 shadow-[0_16px_32px_rgba(15,23,42,0.05)]";
|
|
@@ -1880,7 +1914,7 @@ var UpdatesCard = ({
|
|
|
1880
1914
|
/* @__PURE__ */ jsx("footer", { className: footerClass, children: /* @__PURE__ */ jsx(Link, { href: "/update", children: "View updates \u2192" }) })
|
|
1881
1915
|
] });
|
|
1882
1916
|
UpdatesCard.displayName = "UpdatesCard";
|
|
1883
|
-
var UploadIcon = (props) => /* @__PURE__ */
|
|
1917
|
+
var UploadIcon = (props) => /* @__PURE__ */ jsx(
|
|
1884
1918
|
"svg",
|
|
1885
1919
|
{
|
|
1886
1920
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -1888,13 +1922,11 @@ var UploadIcon = (props) => /* @__PURE__ */ jsxs(
|
|
|
1888
1922
|
fill: "none",
|
|
1889
1923
|
stroke: "currentColor",
|
|
1890
1924
|
strokeWidth: 1.5,
|
|
1925
|
+
strokeLinecap: "round",
|
|
1926
|
+
strokeLinejoin: "round",
|
|
1891
1927
|
"aria-hidden": "true",
|
|
1892
1928
|
...props,
|
|
1893
|
-
children:
|
|
1894
|
-
/* @__PURE__ */ jsx("path", { d: "M12 16V3" }),
|
|
1895
|
-
/* @__PURE__ */ jsx("path", { d: "M8 7l4-4 4 4" }),
|
|
1896
|
-
/* @__PURE__ */ jsx("path", { d: "M5 21h14" })
|
|
1897
|
-
]
|
|
1929
|
+
children: /* @__PURE__ */ jsx("path", { d: "M3 16.5v2.25A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75V16.5m-13.5-9L12 3m0 0l4.5 4.5M12 3v13.5" })
|
|
1898
1930
|
}
|
|
1899
1931
|
);
|
|
1900
1932
|
var baseCardClass2 = "flex h-full flex-col rounded-xl border border-gray-200 bg-white p-6 shadow-[0_16px_32px_rgba(15,23,42,0.05)]";
|
|
@@ -2301,7 +2333,7 @@ var UserSettingsCard = () => /* @__PURE__ */ jsxs("section", { className: baseCa
|
|
|
2301
2333
|
/* @__PURE__ */ jsx("footer", { className: footerClass3, children: /* @__PURE__ */ jsx(Link, { href: "/user-settings", children: "View user settings \u2192" }) })
|
|
2302
2334
|
] });
|
|
2303
2335
|
UserSettingsCard.displayName = "UserSettingsCard";
|
|
2304
|
-
var UsersIcon = (props) => /* @__PURE__ */
|
|
2336
|
+
var UsersIcon = (props) => /* @__PURE__ */ jsx(
|
|
2305
2337
|
"svg",
|
|
2306
2338
|
{
|
|
2307
2339
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -2309,17 +2341,14 @@ var UsersIcon = (props) => /* @__PURE__ */ jsxs(
|
|
|
2309
2341
|
fill: "none",
|
|
2310
2342
|
stroke: "currentColor",
|
|
2311
2343
|
strokeWidth: 1.5,
|
|
2344
|
+
strokeLinecap: "round",
|
|
2345
|
+
strokeLinejoin: "round",
|
|
2312
2346
|
"aria-hidden": "true",
|
|
2313
2347
|
...props,
|
|
2314
|
-
children:
|
|
2315
|
-
/* @__PURE__ */ jsx("path", { d: "M16 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2" }),
|
|
2316
|
-
/* @__PURE__ */ jsx("circle", { cx: 10, cy: 8, r: 4 }),
|
|
2317
|
-
/* @__PURE__ */ jsx("path", { d: "M20 21v-2a4 4 0 0 0-3-3.87" }),
|
|
2318
|
-
/* @__PURE__ */ jsx("path", { d: "M17 3a4 4 0 0 1 0 8" })
|
|
2319
|
-
]
|
|
2348
|
+
children: /* @__PURE__ */ jsx("path", { d: "M15 19.128a9.38 9.38 0 002.625.372 9.337 9.337 0 004.121-.952 4.125 4.125 0 00-7.533-2.493M15 19.128v-.003c0-1.113-.285-2.16-.786-3.07M15 19.128v.106A12.318 12.318 0 018.624 21c-2.331 0-4.512-.645-6.374-1.766l-.001-.109a6.375 6.375 0 0111.964-3.07M12 6.375a3.375 3.375 0 11-6.75 0 3.375 3.375 0 016.75 0zm8.25 2.25a2.625 2.625 0 11-5.25 0 2.625 2.625 0 015.25 0z" })
|
|
2320
2349
|
}
|
|
2321
2350
|
);
|
|
2322
|
-
var KeyIcon = (props) => /* @__PURE__ */
|
|
2351
|
+
var KeyIcon = (props) => /* @__PURE__ */ jsx(
|
|
2323
2352
|
"svg",
|
|
2324
2353
|
{
|
|
2325
2354
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -2327,13 +2356,11 @@ var KeyIcon = (props) => /* @__PURE__ */ jsxs(
|
|
|
2327
2356
|
fill: "none",
|
|
2328
2357
|
stroke: "currentColor",
|
|
2329
2358
|
strokeWidth: 1.5,
|
|
2359
|
+
strokeLinecap: "round",
|
|
2360
|
+
strokeLinejoin: "round",
|
|
2330
2361
|
"aria-hidden": "true",
|
|
2331
2362
|
...props,
|
|
2332
|
-
children:
|
|
2333
|
-
/* @__PURE__ */ jsx("circle", { cx: 7, cy: 15, r: 4 }),
|
|
2334
|
-
/* @__PURE__ */ jsx("path", { d: "m10.85 12.15 4.3-4.3a2 2 0 0 1 2.83 0l.47.47a2 2 0 0 1 0 2.83l-4.3 4.3" }),
|
|
2335
|
-
/* @__PURE__ */ jsx("path", { d: "M16 11l1.5 1.5" })
|
|
2336
|
-
]
|
|
2363
|
+
children: /* @__PURE__ */ jsx("path", { d: "M15.75 5.25a3 3 0 013 3m3 0a6 6 0 01-7.029 5.912c-.563-.097-1.159.026-1.563.43L10.5 17.25H8.25v2.25H6v2.25H2.25v-2.818c0-.597.237-1.17.659-1.591l6.499-6.499c.404-.404.527-1 .43-1.563A6 6 0 1121.75 8.25z" })
|
|
2337
2364
|
}
|
|
2338
2365
|
);
|
|
2339
2366
|
var baseCardClass4 = "flex h-full flex-col rounded-xl border border-gray-200 bg-white p-6 shadow-[0_16px_32px_rgba(15,23,42,0.05)]";
|