@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.
Files changed (51) hide show
  1. package/components/metadata/registry.json +2 -2
  2. package/components/metadata/registry.md +2 -2
  3. package/datadog/tracer.d.ts +3 -0
  4. package/datadog/tracer.js +82 -0
  5. package/datadog/tracer.ts +101 -0
  6. package/dist/esm/index.js +91 -64
  7. package/dist/esm/index.js.map +1 -1
  8. package/dist/esm/install-card.js +8 -21
  9. package/dist/esm/install-card.js.map +1 -1
  10. package/dist/esm/license-card.js +8 -12
  11. package/dist/esm/license-card.js.map +1 -1
  12. package/dist/esm/license-details.js +1 -1
  13. package/dist/esm/license-details.js.map +1 -1
  14. package/dist/esm/support-card.js +4 -6
  15. package/dist/esm/support-card.js.map +1 -1
  16. package/dist/esm/team-settings-card.js +8 -13
  17. package/dist/esm/team-settings-card.js.map +1 -1
  18. package/dist/esm/top-nav.js +69 -29
  19. package/dist/esm/top-nav.js.map +1 -1
  20. package/dist/esm/update-layout.js +69 -29
  21. package/dist/esm/update-layout.js.map +1 -1
  22. package/dist/esm/updates-card.js +8 -14
  23. package/dist/esm/updates-card.js.map +1 -1
  24. package/dist/esm/utils/observability/index.js +193 -0
  25. package/dist/esm/utils/observability/index.js.map +1 -0
  26. package/dist/index.js +91 -64
  27. package/dist/index.js.map +1 -1
  28. package/dist/install-card.js +8 -21
  29. package/dist/install-card.js.map +1 -1
  30. package/dist/license-card.js +8 -12
  31. package/dist/license-card.js.map +1 -1
  32. package/dist/license-details.js +1 -1
  33. package/dist/license-details.js.map +1 -1
  34. package/dist/styles.css +2 -2
  35. package/dist/support-card.js +4 -6
  36. package/dist/support-card.js.map +1 -1
  37. package/dist/team-settings-card.js +8 -13
  38. package/dist/team-settings-card.js.map +1 -1
  39. package/dist/top-nav.js +69 -29
  40. package/dist/top-nav.js.map +1 -1
  41. package/dist/update-layout.js +69 -29
  42. package/dist/update-layout.js.map +1 -1
  43. package/dist/updates-card.js +8 -14
  44. package/dist/updates-card.js.map +1 -1
  45. package/dist/utils/observability/index.d.mts +13 -0
  46. package/dist/utils/observability/index.d.ts +13 -0
  47. package/dist/utils/observability/index.js +198 -0
  48. package/dist/utils/observability/index.js.map +1 -0
  49. package/instrumentation.d.ts +8 -0
  50. package/instrumentation.js +22 -0
  51. package/package.json +16 -3
@@ -6,7 +6,7 @@ import { jsxs, jsx } from 'react/jsx-runtime';
6
6
  * This file is generated by tsup. Do not edit manually.
7
7
  */
8
8
 
9
- var GlobeIcon = (props) => /* @__PURE__ */ jsxs(
9
+ var GlobeIcon = (props) => /* @__PURE__ */ jsx(
10
10
  "svg",
11
11
  {
12
12
  xmlns: "http://www.w3.org/2000/svg",
@@ -14,16 +14,14 @@ var GlobeIcon = (props) => /* @__PURE__ */ jsxs(
14
14
  fill: "none",
15
15
  stroke: "currentColor",
16
16
  strokeWidth: 1.5,
17
+ strokeLinecap: "round",
18
+ strokeLinejoin: "round",
17
19
  "aria-hidden": "true",
18
20
  ...props,
19
- children: [
20
- /* @__PURE__ */ jsx("circle", { cx: 12, cy: 12, r: 10 }),
21
- /* @__PURE__ */ jsx("path", { d: "M2 12h20" }),
22
- /* @__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" })
23
- ]
21
+ 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" })
24
22
  }
25
23
  );
26
- var AirGapIcon = (props) => /* @__PURE__ */ jsxs(
24
+ var AirGapIcon = (props) => /* @__PURE__ */ jsx(
27
25
  "svg",
28
26
  {
29
27
  xmlns: "http://www.w3.org/2000/svg",
@@ -31,15 +29,11 @@ var AirGapIcon = (props) => /* @__PURE__ */ jsxs(
31
29
  fill: "none",
32
30
  stroke: "currentColor",
33
31
  strokeWidth: 1.5,
32
+ strokeLinecap: "round",
33
+ strokeLinejoin: "round",
34
34
  "aria-hidden": "true",
35
35
  ...props,
36
- children: [
37
- /* @__PURE__ */ jsx("path", { d: "m4 4 16 16" }),
38
- /* @__PURE__ */ jsx("path", { d: "M7.5 4.5a8 8 0 0 1 9 0" }),
39
- /* @__PURE__ */ jsx("path", { d: "M4.5 7.5a8 8 0 0 0 0 9" }),
40
- /* @__PURE__ */ jsx("path", { d: "M16.5 19.5a8 8 0 0 0 0-9" }),
41
- /* @__PURE__ */ jsx("path", { d: "M7 12a5 5 0 0 0 5 5" })
42
- ]
36
+ 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" })
43
37
  }
44
38
  );
45
39
  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)]";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/updates-card.tsx"],"names":[],"mappings":"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","file":"updates-card.js","sourcesContent":["import type { SVGProps } from \"react\";\nimport Link from \"next/link\";\n\nconst GlobeIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n aria-hidden=\"true\"\n {...props}\n >\n <circle cx={12} cy={12} r={10} />\n <path d=\"M2 12h20\" />\n <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\" />\n </svg>\n);\n\nconst AirGapIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n aria-hidden=\"true\"\n {...props}\n >\n <path d=\"m4 4 16 16\" />\n <path d=\"M7.5 4.5a8 8 0 0 1 9 0\" />\n <path d=\"M4.5 7.5a8 8 0 0 0 0 9\" />\n <path d=\"M16.5 19.5a8 8 0 0 0 0-9\" />\n <path d=\"M7 12a5 5 0 0 0 5 5\" />\n </svg>\n);\n\nconst baseCardClass =\n \"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)]\";\nconst headingClass = \"text-lg font-semibold text-gray-900\";\nconst contentClass = \"mt-4 flex-1 space-y-3\";\nconst itemClass = \"flex items-center gap-3 text-sm text-gray-600\";\nconst iconClass = \"h-5 w-5 text-gray-500\";\nconst footerClass =\n \"mt-6 flex justify-end text-sm font-semibold text-primary hover:text-primary/80\";\nconst badgeClass =\n \"ml-2 inline-flex h-5 min-w-[20px] items-center justify-center rounded-full bg-blue-500 px-1.5 text-xs font-medium text-white\";\n\nexport interface UpdatesCardProps {\n /** Number of active online instances (checked in within 24 hours) */\n onlineActiveCount?: number;\n /** Number of air gap instances */\n airgapCount?: number;\n /** Number of updates available for online instances */\n onlineUpdates?: number;\n /** Number of updates available for airgap instances */\n airgapUpdates?: number;\n}\n\nconst Badge = ({ count }: { count: number }) => (\n <span className={badgeClass} aria-label={`${count} updates available`}>\n {count}\n </span>\n);\n\nexport const UpdatesCard = ({\n onlineActiveCount = 0,\n airgapCount = 0,\n onlineUpdates = 0,\n airgapUpdates = 0\n}: UpdatesCardProps) => (\n <section className={baseCardClass} aria-labelledby=\"updates-card-heading\">\n <header>\n <h2 id=\"updates-card-heading\" className={headingClass}>\n Updates\n </h2>\n </header>\n <div className={contentClass}>\n <div className={itemClass}>\n <GlobeIcon className={iconClass} />\n <span>\n {onlineActiveCount} Active Online {onlineActiveCount === 1 ? \"instance\" : \"instances\"}\n </span>\n {onlineUpdates > 0 && <Badge count={onlineUpdates} />}\n </div>\n <div className={itemClass}>\n <AirGapIcon className={iconClass} />\n <span>\n {airgapCount} Air gap {airgapCount === 1 ? \"instance\" : \"instances\"}\n </span>\n {airgapUpdates > 0 && <Badge count={airgapUpdates} />}\n </div>\n </div>\n <footer className={footerClass}>\n <Link href=\"/update\">View updates →</Link>\n </footer>\n </section>\n);\n\nUpdatesCard.displayName = \"UpdatesCard\";\n"]}
1
+ {"version":3,"sources":["../../src/components/updates-card.tsx"],"names":[],"mappings":"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","file":"updates-card.js","sourcesContent":["import type { SVGProps } from \"react\";\nimport Link from \"next/link\";\n\nconst GlobeIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n <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\" />\n </svg>\n);\n\nconst AirGapIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n <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\" />\n </svg>\n);\n\nconst baseCardClass =\n \"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)]\";\nconst headingClass = \"text-lg font-semibold text-gray-900\";\nconst contentClass = \"mt-4 flex-1 space-y-3\";\nconst itemClass = \"flex items-center gap-3 text-sm text-gray-600\";\nconst iconClass = \"h-5 w-5 text-gray-500\";\nconst footerClass =\n \"mt-6 flex justify-end text-sm font-semibold text-primary hover:text-primary/80\";\nconst badgeClass =\n \"ml-2 inline-flex h-5 min-w-[20px] items-center justify-center rounded-full bg-blue-500 px-1.5 text-xs font-medium text-white\";\n\nexport interface UpdatesCardProps {\n /** Number of active online instances (checked in within 24 hours) */\n onlineActiveCount?: number;\n /** Number of air gap instances */\n airgapCount?: number;\n /** Number of updates available for online instances */\n onlineUpdates?: number;\n /** Number of updates available for airgap instances */\n airgapUpdates?: number;\n}\n\nconst Badge = ({ count }: { count: number }) => (\n <span className={badgeClass} aria-label={`${count} updates available`}>\n {count}\n </span>\n);\n\nexport const UpdatesCard = ({\n onlineActiveCount = 0,\n airgapCount = 0,\n onlineUpdates = 0,\n airgapUpdates = 0\n}: UpdatesCardProps) => (\n <section className={baseCardClass} aria-labelledby=\"updates-card-heading\">\n <header>\n <h2 id=\"updates-card-heading\" className={headingClass}>\n Updates\n </h2>\n </header>\n <div className={contentClass}>\n <div className={itemClass}>\n <GlobeIcon className={iconClass} />\n <span>\n {onlineActiveCount} Active Online {onlineActiveCount === 1 ? \"instance\" : \"instances\"}\n </span>\n {onlineUpdates > 0 && <Badge count={onlineUpdates} />}\n </div>\n <div className={itemClass}>\n <AirGapIcon className={iconClass} />\n <span>\n {airgapCount} Air gap {airgapCount === 1 ? \"instance\" : \"instances\"}\n </span>\n {airgapUpdates > 0 && <Badge count={airgapUpdates} />}\n </div>\n </div>\n <footer className={footerClass}>\n <Link href=\"/update\">View updates →</Link>\n </footer>\n </section>\n);\n\nUpdatesCard.displayName = \"UpdatesCard\";\n"]}
@@ -0,0 +1,193 @@
1
+ /**
2
+ * Enterprise Portal Components
3
+ * This file is generated by tsup. Do not edit manually.
4
+ */
5
+ var __defProp = Object.defineProperty;
6
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
7
+ var __getOwnPropNames = Object.getOwnPropertyNames;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
10
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
11
+ }) : x)(function(x) {
12
+ if (typeof require !== "undefined") return require.apply(this, arguments);
13
+ throw Error('Dynamic require of "' + x + '" is not supported');
14
+ });
15
+ var __esm = (fn, res) => function __init() {
16
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
17
+ };
18
+ var __export = (target, all) => {
19
+ for (var name in all)
20
+ __defProp(target, name, { get: all[name], enumerable: true });
21
+ };
22
+ var __copyProps = (to, from, except, desc) => {
23
+ if (from && typeof from === "object" || typeof from === "function") {
24
+ for (let key of __getOwnPropNames(from))
25
+ if (!__hasOwnProp.call(to, key) && key !== except)
26
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
27
+ }
28
+ return to;
29
+ };
30
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
31
+
32
+ // datadog/tracer.ts
33
+ var tracer_exports = {};
34
+ __export(tracer_exports, {
35
+ default: () => tracer_default
36
+ });
37
+ var rawFlag, isEnabled, tracer, getRoutePattern, tracer_default;
38
+ var init_tracer = __esm({
39
+ "datadog/tracer.ts"() {
40
+ rawFlag = String(process.env.USE_DATADOG_APM || "").toLowerCase();
41
+ isEnabled = rawFlag === "true";
42
+ process.env.DD_TRACE_ENABLED = isEnabled ? "1" : "0";
43
+ tracer = null;
44
+ if (isEnabled) {
45
+ const serviceName = process.env.DD_SERVICE || "enterprise-portal";
46
+ const environment = process.env.DD_ENV || process.env.NODE_ENV || "development";
47
+ const version = process.env.DD_VERSION || process.env.NEXT_PUBLIC_VERSION || "0.0.0-dev";
48
+ const agentHost = process.env.DD_AGENT_HOST || process.env.DATADOG_AGENT_HOST || "127.0.0.1";
49
+ const agentPort = process.env.DD_TRACE_AGENT_PORT || "8126";
50
+ process.env.DD_SERVICE = serviceName;
51
+ process.env.DD_ENV = environment;
52
+ {
53
+ process.env.DD_VERSION = version;
54
+ }
55
+ process.env.DD_AGENT_HOST = agentHost;
56
+ process.env.DD_TRACE_AGENT_PORT = agentPort;
57
+ const dbmPropagationMode = process.env.DD_DBM_PROPAGATION_MODE || "full";
58
+ process.env.DD_DBM_PROPAGATION_MODE = dbmPropagationMode;
59
+ try {
60
+ const ddTrace = __require("dd-trace");
61
+ tracer = ddTrace.init({
62
+ service: serviceName,
63
+ env: environment,
64
+ version,
65
+ logInjection: true,
66
+ runtimeMetrics: true,
67
+ appsec: false,
68
+ profiling: false,
69
+ startupLogs: true
70
+ // Enable for debugging
71
+ });
72
+ console.log(`[datadog] Tracer initialized: service=${serviceName}, env=${environment}, version=${version}, agent=${agentHost}:${agentPort}`);
73
+ tracer.use("dns", false);
74
+ tracer.use("net", false);
75
+ tracer.use("http", {
76
+ server: {
77
+ hooks: {
78
+ request: (span, req) => {
79
+ if (!span) return;
80
+ const url = req?.url || "";
81
+ const method = req?.method || "GET";
82
+ const path = url.split("?")[0];
83
+ if (path.startsWith("/_next/")) {
84
+ span.context()._trace.isRecording = false;
85
+ return;
86
+ }
87
+ const routePattern = getRoutePattern(path);
88
+ span.setTag("resource.name", `${method} ${routePattern}`);
89
+ span.setTag("http.route", routePattern);
90
+ }
91
+ }
92
+ }
93
+ });
94
+ } catch (err) {
95
+ console.error("[datadog] failed to initialize tracing", err);
96
+ tracer = null;
97
+ }
98
+ }
99
+ getRoutePattern = (path) => {
100
+ const routePatterns = [
101
+ // Update instance routes - normalize dynamic segments (capture suffix to preserve sub-routes)
102
+ { pattern: /^\/update\/instance\/[^/]+(.*)$/, replacement: "/update/instance/[instanceId]$1" }
103
+ ];
104
+ for (const { pattern, replacement } of routePatterns) {
105
+ if (pattern.test(path)) {
106
+ return path.replace(pattern, replacement);
107
+ }
108
+ }
109
+ return path;
110
+ };
111
+ tracer_default = tracer;
112
+ }
113
+ });
114
+
115
+ // src/utils/observability/tracing.ts
116
+ var tracerCache = void 0;
117
+ function getTracer() {
118
+ if (tracerCache !== void 0) {
119
+ return tracerCache;
120
+ }
121
+ const rawFlag2 = String(process.env.USE_DATADOG_APM || "").toLowerCase();
122
+ const isEnabled2 = rawFlag2 === "true";
123
+ if (!isEnabled2) {
124
+ tracerCache = null;
125
+ return null;
126
+ }
127
+ try {
128
+ const tracerModule = (init_tracer(), __toCommonJS(tracer_exports));
129
+ const tracer2 = tracerModule.default || tracerModule;
130
+ if (tracer2 && typeof tracer2.trace === "function") {
131
+ tracerCache = tracer2;
132
+ return tracerCache;
133
+ }
134
+ } catch (err) {
135
+ console.warn("Failed to load tracer:", err);
136
+ }
137
+ tracerCache = null;
138
+ return null;
139
+ }
140
+ function getActiveSpan() {
141
+ const activeTracer = getTracer();
142
+ if (!activeTracer || !activeTracer.scope) {
143
+ return void 0;
144
+ }
145
+ const active = activeTracer.scope().active();
146
+ return active || void 0;
147
+ }
148
+ async function withTrace(name, fn) {
149
+ const activeTracer = getTracer();
150
+ if (!activeTracer) {
151
+ return fn(void 0);
152
+ }
153
+ return activeTracer.trace(name, async (span) => {
154
+ if (span) {
155
+ span.setTag("component", "application");
156
+ }
157
+ try {
158
+ const result = await fn(span);
159
+ return result;
160
+ } catch (error) {
161
+ if (span) {
162
+ span.setTag("error", error);
163
+ }
164
+ throw error;
165
+ }
166
+ });
167
+ }
168
+ function traceServerAction(name, fn) {
169
+ const spanName = name.startsWith("server.action.") ? name : `server.action.${name}`;
170
+ const traced = async (...args) => {
171
+ return withTrace(spanName, async (span) => {
172
+ if (span) {
173
+ span.setTag("component", "server-action");
174
+ }
175
+ const result = await fn(...args);
176
+ return result;
177
+ });
178
+ };
179
+ return traced;
180
+ }
181
+ function traceFunction(name, fn) {
182
+ const traced = async (...args) => {
183
+ return withTrace(name, async () => {
184
+ const result = await fn(...args);
185
+ return result;
186
+ });
187
+ };
188
+ return traced;
189
+ }
190
+
191
+ export { getActiveSpan, traceFunction, traceServerAction, withTrace };
192
+ //# sourceMappingURL=index.js.map
193
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../datadog/tracer.ts","../../../../src/utils/observability/tracing.ts"],"names":["rawFlag","isEnabled","tracer"],"mappings":"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","file":"index.js","sourcesContent":["import type { Tracer, Span, init as ddTraceInit } from 'dd-trace';\nimport type { IncomingMessage } from 'http';\n\nconst rawFlag = String(process.env.USE_DATADOG_APM || '').toLowerCase();\nconst isEnabled = rawFlag === 'true';\n\nprocess.env.DD_TRACE_ENABLED = isEnabled ? '1' : '0';\n\nlet tracer: Tracer | null = null;\n\nif (isEnabled) {\n const serviceName = process.env.DD_SERVICE || 'enterprise-portal';\n const environment = process.env.DD_ENV || process.env.NODE_ENV || 'development';\n const version = process.env.DD_VERSION || process.env.NEXT_PUBLIC_VERSION || '0.0.0-dev';\n\n const agentHost = process.env.DD_AGENT_HOST || process.env.DATADOG_AGENT_HOST || '127.0.0.1';\n const agentPort = process.env.DD_TRACE_AGENT_PORT || '8126';\n\n process.env.DD_SERVICE = serviceName;\n process.env.DD_ENV = environment;\n if (version) {\n process.env.DD_VERSION = version;\n }\n process.env.DD_AGENT_HOST = agentHost;\n process.env.DD_TRACE_AGENT_PORT = agentPort;\n\n const dbmPropagationMode = (process.env.DD_DBM_PROPAGATION_MODE || 'full') as 'disabled' | 'service' | 'full';\n\n process.env.DD_DBM_PROPAGATION_MODE = dbmPropagationMode;\n\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const ddTrace = require('dd-trace');\n tracer = (ddTrace.init as typeof ddTraceInit)({\n service: serviceName,\n env: environment,\n version,\n logInjection: true,\n runtimeMetrics: true,\n appsec: false,\n profiling: false,\n startupLogs: true, // Enable for debugging\n }) as Tracer;\n \n console.log(`[datadog] Tracer initialized: service=${serviceName}, env=${environment}, version=${version}, agent=${agentHost}:${agentPort}`);\n\n // Disable low-level network instrumentation for localhost connections\n tracer.use('dns', false);\n tracer.use('net', false);\n // Configure http plugin to normalize route patterns\n tracer.use('http', {\n server: {\n hooks: {\n request: (span?: Span, req?: IncomingMessage) => {\n if (!span) return;\n\n const url = req?.url || '';\n const method = req?.method || 'GET';\n const path = url.split('?')[0];\n\n // Drop Next.js internal requests\n if (path.startsWith('/_next/')) {\n // @ts-expect-error - using internal property to drop the trace\n span.context()._trace.isRecording = false;\n return;\n }\n\n const routePattern = getRoutePattern(path);\n\n span.setTag('resource.name', `${method} ${routePattern}`);\n span.setTag('http.route', routePattern);\n }\n }\n }\n });\n } catch (err) {\n // Do not crash the app if tracing fails to initialize\n console.error('[datadog] failed to initialize tracing', err);\n tracer = null;\n }\n}\n\n// Function to convert actual paths to route patterns\nconst getRoutePattern = (path: string): string => {\n // Define route patterns for dynamic routes in enterprise portal\n const routePatterns = [\n // Update instance routes - normalize dynamic segments (capture suffix to preserve sub-routes)\n { pattern: /^\\/update\\/instance\\/[^/]+(.*)$/, replacement: '/update/instance/[instanceId]$1' },\n ];\n\n for (const { pattern, replacement } of routePatterns) {\n if (pattern.test(path)) {\n return path.replace(pattern, replacement);\n }\n }\n\n // Return original path if no pattern matches\n return path;\n}\n\nexport default tracer;\n","import type { Span, Tracer } from 'dd-trace';\n\n// Type for a function that has been wrapped with tracing (always returns a Promise)\ntype TracedFunction<T extends (...args: any[]) => any> = (\n ...args: Parameters<T>\n) => Promise<Awaited<ReturnType<T>>>;\n\n// Lazy-load tracer only when tracing is enabled\n// Using undefined to distinguish between \"not loaded yet\" and \"loaded but null\"\nlet tracerCache: Tracer | null | undefined = undefined;\n\nfunction getTracer(): Tracer | null {\n // Return cached result if already loaded (prevents race conditions and multiple initializations)\n if (tracerCache !== undefined) {\n return tracerCache;\n }\n\n // Check if tracing is enabled at runtime (consistent with datadog/tracer.ts and instrumentation.ts)\n const rawFlag = String(process.env.USE_DATADOG_APM || '').toLowerCase();\n const isEnabled = rawFlag === 'true';\n\n if (!isEnabled) {\n tracerCache = null;\n return null;\n }\n\n // Lazy load the tracer module only when needed\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const tracerModule = require('../../../datadog/tracer');\n const tracer = tracerModule.default || tracerModule;\n\n if (tracer && typeof (tracer as any).trace === 'function') {\n tracerCache = tracer as Tracer;\n return tracerCache;\n }\n } catch (err) {\n console.warn('Failed to load tracer:', err);\n }\n\n tracerCache = null;\n return null;\n}\n\n/**\n * Get the currently active span from the tracer's scope.\n * This can be used to pass span context to database calls.\n */\nexport function getActiveSpan(): Span | undefined {\n const activeTracer = getTracer();\n if (!activeTracer || !activeTracer.scope) {\n return undefined;\n }\n const active = activeTracer.scope().active();\n return active || undefined;\n}\n\nexport async function withTrace<T>(\n name: string,\n fn: (span?: Span) => Promise<T> | T,\n): Promise<T> {\n const activeTracer = getTracer();\n if (!activeTracer) {\n return fn(undefined);\n }\n\n return activeTracer.trace(name, async (span?: Span) => {\n if (span) {\n span.setTag('component', 'application');\n }\n try {\n const result = await fn(span);\n return result;\n } catch (error) {\n if (span) {\n span.setTag('error', error as any);\n }\n throw error;\n }\n });\n}\n\nexport function traceServerAction<T extends (...args: any[]) => any>(\n name: string,\n fn: T,\n): TracedFunction<T> {\n const spanName = name.startsWith('server.action.') ? name : `server.action.${name}`;\n\n const traced: TracedFunction<T> = async (...args: Parameters<T>) => {\n return withTrace(spanName, async (span) => {\n if (span) {\n span.setTag('component', 'server-action');\n }\n const result = await fn(...args);\n return result;\n });\n };\n\n return traced;\n}\n\nexport function traceFunction<T extends (...args: any[]) => any>(\n name: string,\n fn: T,\n): TracedFunction<T> {\n const traced: TracedFunction<T> = async (...args: Parameters<T>) => {\n return withTrace(name, async () => {\n const result = await fn(...args);\n return result;\n });\n };\n\n return traced;\n}\n"]}
package/dist/index.js CHANGED
@@ -16,7 +16,7 @@ var Link__default = /*#__PURE__*/_interopDefault(Link);
16
16
 
17
17
  // package.json
18
18
  var package_default = {
19
- version: "0.0.11"};
19
+ version: "0.0.12"};
20
20
 
21
21
  // src/tokens/index.ts
22
22
  var baseTokens = {
@@ -1453,7 +1453,7 @@ var LicenseDetails = async ({
1453
1453
  console.debug("[portal-components] license response", response.raw);
1454
1454
  const { license } = response;
1455
1455
  const rows = buildPrimaryRows(license);
1456
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-3xl border border-gray-100 bg-white p-8 shadow-[0_18px_45px_rgba(17,24,39,0.08)]", children: [
1456
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded border border-gray-100 bg-white p-8 shadow-[0_18px_45px_rgba(17,24,39,0.08)]", children: [
1457
1457
  /* @__PURE__ */ jsxRuntime.jsxs("header", { className: "flex flex-col border-b border-gray-100 pb-6", children: [
1458
1458
  /* @__PURE__ */ jsxRuntime.jsx("h1", { className: "text-3xl font-bold text-gray-900", children: title }),
1459
1459
  description ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-2 text-sm text-gray-600", children: description }) : null
@@ -1480,10 +1480,14 @@ var defaultTopNavLinks = [
1480
1480
  className: "h-4 w-4",
1481
1481
  fill: "none",
1482
1482
  stroke: "currentColor",
1483
- strokeWidth: "1.5",
1483
+ strokeWidth: "2",
1484
+ strokeLinecap: "round",
1485
+ strokeLinejoin: "round",
1484
1486
  children: [
1485
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M4 13h6V3H4z" }),
1486
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M14 21h6V3h-6z" })
1487
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { width: "7", height: "9", x: "3", y: "3", rx: "1" }),
1488
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { width: "7", height: "5", x: "14", y: "3", rx: "1" }),
1489
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { width: "7", height: "9", x: "14", y: "12", rx: "1" }),
1490
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { width: "7", height: "5", x: "3", y: "16", rx: "1" })
1487
1491
  ]
1488
1492
  }
1489
1493
  )
@@ -1498,11 +1502,13 @@ var defaultTopNavLinks = [
1498
1502
  className: "h-4 w-4",
1499
1503
  fill: "none",
1500
1504
  stroke: "currentColor",
1501
- strokeWidth: "1.5",
1505
+ strokeWidth: "2",
1506
+ strokeLinecap: "round",
1507
+ strokeLinejoin: "round",
1502
1508
  children: [
1503
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 3v12" }),
1504
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m7 11 5 5 5-5" }),
1505
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M5 21h14" })
1509
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" }),
1510
+ /* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "7 10 12 15 17 10" }),
1511
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "12", x2: "12", y1: "15", y2: "3" })
1506
1512
  ]
1507
1513
  }
1508
1514
  )
@@ -1518,10 +1524,13 @@ var defaultTopNavLinks = [
1518
1524
  className: "h-4 w-4",
1519
1525
  fill: "none",
1520
1526
  stroke: "currentColor",
1521
- strokeWidth: "1.5",
1527
+ strokeWidth: "2",
1528
+ strokeLinecap: "round",
1529
+ strokeLinejoin: "round",
1522
1530
  children: [
1523
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 5v14" }),
1524
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M5 12h14" })
1531
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" }),
1532
+ /* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "7 10 12 15 17 10" }),
1533
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "12", x2: "12", y1: "15", y2: "3" })
1525
1534
  ]
1526
1535
  }
1527
1536
  )
@@ -1537,15 +1546,34 @@ var defaultTopNavLinks = [
1537
1546
  className: "h-4 w-4",
1538
1547
  fill: "none",
1539
1548
  stroke: "currentColor",
1540
- strokeWidth: "1.5",
1549
+ strokeWidth: "2",
1550
+ strokeLinecap: "round",
1551
+ strokeLinejoin: "round",
1541
1552
  children: [
1542
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M4 4v6h6" }),
1543
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M20 20v-6h-6" }),
1544
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M4 10c1.5-4 6-6 10-4m6 4c-1.5 4-6 6-10 4" })
1553
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8" }),
1554
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M21 3v5h-5" })
1545
1555
  ]
1546
1556
  }
1547
1557
  )
1548
1558
  },
1559
+ {
1560
+ label: "Security",
1561
+ href: "/security",
1562
+ icon: /* @__PURE__ */ jsxRuntime.jsx(
1563
+ "svg",
1564
+ {
1565
+ xmlns: "http://www.w3.org/2000/svg",
1566
+ viewBox: "0 0 24 24",
1567
+ className: "h-4 w-4",
1568
+ fill: "none",
1569
+ stroke: "currentColor",
1570
+ strokeWidth: "2",
1571
+ strokeLinecap: "round",
1572
+ strokeLinejoin: "round",
1573
+ children: /* @__PURE__ */ jsxRuntime.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" })
1574
+ }
1575
+ )
1576
+ },
1549
1577
  {
1550
1578
  label: "Release History",
1551
1579
  href: "/release-history",
@@ -1557,10 +1585,15 @@ var defaultTopNavLinks = [
1557
1585
  className: "h-4 w-4",
1558
1586
  fill: "none",
1559
1587
  stroke: "currentColor",
1560
- strokeWidth: "1.5",
1588
+ strokeWidth: "2",
1589
+ strokeLinecap: "round",
1590
+ strokeLinejoin: "round",
1561
1591
  children: [
1562
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 8v4l3 2" }),
1563
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "9" })
1592
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z" }),
1593
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M14 2v4a2 2 0 0 0 2 2h4" }),
1594
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M10 9H8" }),
1595
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16 13H8" }),
1596
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16 17H8" })
1564
1597
  ]
1565
1598
  }
1566
1599
  )
@@ -1576,12 +1609,13 @@ var defaultTopNavLinks = [
1576
1609
  className: "h-4 w-4",
1577
1610
  fill: "none",
1578
1611
  stroke: "currentColor",
1579
- strokeWidth: "1.5",
1612
+ strokeWidth: "2",
1613
+ strokeLinecap: "round",
1614
+ strokeLinejoin: "round",
1580
1615
  children: [
1581
- /* @__PURE__ */ jsxRuntime.jsx("rect", { width: "14", height: "18", x: "5", y: "3", rx: "2" }),
1582
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M9 7h6" }),
1583
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M9 11h6" }),
1584
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M9 15h6" })
1616
+ /* @__PURE__ */ jsxRuntime.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" }),
1617
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m21 2-9.6 9.6" }),
1618
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "7.5", cy: "15.5", r: "5.5" })
1585
1619
  ]
1586
1620
  }
1587
1621
  )
@@ -1597,10 +1631,16 @@ var defaultTopNavLinks = [
1597
1631
  className: "h-4 w-4",
1598
1632
  fill: "none",
1599
1633
  stroke: "currentColor",
1600
- strokeWidth: "1.5",
1634
+ strokeWidth: "2",
1635
+ strokeLinecap: "round",
1636
+ strokeLinejoin: "round",
1601
1637
  children: [
1602
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M18 16a6 6 0 1 0-12 0v2h12Z" }),
1603
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "7", r: "4" })
1638
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10" }),
1639
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m4.93 4.93 4.24 4.24" }),
1640
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m14.83 9.17 4.24-4.24" }),
1641
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m14.83 14.83 4.24 4.24" }),
1642
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m9.17 14.83-4.24 4.24" }),
1643
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "4" })
1604
1644
  ]
1605
1645
  }
1606
1646
  )
@@ -1700,7 +1740,7 @@ var TopNav = async ({
1700
1740
  return /* @__PURE__ */ jsxRuntime.jsx(
1701
1741
  "div",
1702
1742
  {
1703
- className: "relative flex h-[165px] w-full items-start justify-center",
1743
+ className: "relative flex h-[280px] w-full items-start justify-center",
1704
1744
  style: {
1705
1745
  backgroundImage: `linear-gradient(to top, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0) 33%), linear-gradient(${gradientStart}, ${gradientEnd})`,
1706
1746
  backgroundRepeat: "no-repeat",
@@ -1727,7 +1767,7 @@ var TopNav = async ({
1727
1767
  brandTitle ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-lg font-semibold text-gray-900", children: brandTitle }) : null
1728
1768
  ] }) : /* @__PURE__ */ jsxRuntime.jsx("div", {}),
1729
1769
  /* @__PURE__ */ jsxRuntime.jsxs("details", { className: "group relative", children: [
1730
- /* @__PURE__ */ jsxRuntime.jsxs("summary", { className: "flex cursor-pointer items-center gap-2 rounded-lg bg-white px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 list-none", children: [
1770
+ /* @__PURE__ */ jsxRuntime.jsxs("summary", { className: "flex cursor-pointer items-center gap-2 text-sm font-medium text-gray-600 hover:text-gray-900 list-none", children: [
1731
1771
  /* @__PURE__ */ jsxRuntime.jsxs(
1732
1772
  "svg",
1733
1773
  {
@@ -1799,12 +1839,12 @@ var TopNav = async ({
1799
1839
  const className = `flex items-center gap-2 px-4 py-1 transition text-gray-500 ${isActive ? "underline underline-offset-8 decoration-2" : ""}`;
1800
1840
  if (href) {
1801
1841
  return /* @__PURE__ */ jsxRuntime.jsxs(Link__default.default, { href, className, children: [
1802
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: isActive ? "text-rose-600" : "text-gray-500", children: icon }),
1842
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: isActive ? "text-gray-900" : "text-gray-500", children: icon }),
1803
1843
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: label })
1804
1844
  ] }, label);
1805
1845
  }
1806
1846
  return /* @__PURE__ */ jsxRuntime.jsxs("button", { className, type: "button", children: [
1807
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: isActive ? "text-rose-600" : "text-gray-500", children: icon }),
1847
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: isActive ? "text-gray-900" : "text-gray-500", children: icon }),
1808
1848
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: label })
1809
1849
  ] }, label);
1810
1850
  }) })
@@ -1812,7 +1852,7 @@ var TopNav = async ({
1812
1852
  }
1813
1853
  );
1814
1854
  };
1815
- var GlobeIcon = (props) => /* @__PURE__ */ jsxRuntime.jsxs(
1855
+ var GlobeIcon = (props) => /* @__PURE__ */ jsxRuntime.jsx(
1816
1856
  "svg",
1817
1857
  {
1818
1858
  xmlns: "http://www.w3.org/2000/svg",
@@ -1820,16 +1860,14 @@ var GlobeIcon = (props) => /* @__PURE__ */ jsxRuntime.jsxs(
1820
1860
  fill: "none",
1821
1861
  stroke: "currentColor",
1822
1862
  strokeWidth: 1.5,
1863
+ strokeLinecap: "round",
1864
+ strokeLinejoin: "round",
1823
1865
  "aria-hidden": "true",
1824
1866
  ...props,
1825
- children: [
1826
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: 12, cy: 12, r: 10 }),
1827
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M2 12h20" }),
1828
- /* @__PURE__ */ jsxRuntime.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" })
1829
- ]
1867
+ children: /* @__PURE__ */ jsxRuntime.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" })
1830
1868
  }
1831
1869
  );
1832
- var AirGapIcon = (props) => /* @__PURE__ */ jsxRuntime.jsxs(
1870
+ var AirGapIcon = (props) => /* @__PURE__ */ jsxRuntime.jsx(
1833
1871
  "svg",
1834
1872
  {
1835
1873
  xmlns: "http://www.w3.org/2000/svg",
@@ -1837,15 +1875,11 @@ var AirGapIcon = (props) => /* @__PURE__ */ jsxRuntime.jsxs(
1837
1875
  fill: "none",
1838
1876
  stroke: "currentColor",
1839
1877
  strokeWidth: 1.5,
1878
+ strokeLinecap: "round",
1879
+ strokeLinejoin: "round",
1840
1880
  "aria-hidden": "true",
1841
1881
  ...props,
1842
- children: [
1843
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m4 4 16 16" }),
1844
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M7.5 4.5a8 8 0 0 1 9 0" }),
1845
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M4.5 7.5a8 8 0 0 0 0 9" }),
1846
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16.5 19.5a8 8 0 0 0 0-9" }),
1847
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M7 12a5 5 0 0 0 5 5" })
1848
- ]
1882
+ children: /* @__PURE__ */ jsxRuntime.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" })
1849
1883
  }
1850
1884
  );
1851
1885
  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)]";
@@ -1886,7 +1920,7 @@ var UpdatesCard = ({
1886
1920
  /* @__PURE__ */ jsxRuntime.jsx("footer", { className: footerClass, children: /* @__PURE__ */ jsxRuntime.jsx(Link__default.default, { href: "/update", children: "View updates \u2192" }) })
1887
1921
  ] });
1888
1922
  UpdatesCard.displayName = "UpdatesCard";
1889
- var UploadIcon = (props) => /* @__PURE__ */ jsxRuntime.jsxs(
1923
+ var UploadIcon = (props) => /* @__PURE__ */ jsxRuntime.jsx(
1890
1924
  "svg",
1891
1925
  {
1892
1926
  xmlns: "http://www.w3.org/2000/svg",
@@ -1894,13 +1928,11 @@ var UploadIcon = (props) => /* @__PURE__ */ jsxRuntime.jsxs(
1894
1928
  fill: "none",
1895
1929
  stroke: "currentColor",
1896
1930
  strokeWidth: 1.5,
1931
+ strokeLinecap: "round",
1932
+ strokeLinejoin: "round",
1897
1933
  "aria-hidden": "true",
1898
1934
  ...props,
1899
- children: [
1900
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 16V3" }),
1901
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M8 7l4-4 4 4" }),
1902
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M5 21h14" })
1903
- ]
1935
+ children: /* @__PURE__ */ jsxRuntime.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" })
1904
1936
  }
1905
1937
  );
1906
1938
  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)]";
@@ -2307,7 +2339,7 @@ var UserSettingsCard = () => /* @__PURE__ */ jsxRuntime.jsxs("section", { classN
2307
2339
  /* @__PURE__ */ jsxRuntime.jsx("footer", { className: footerClass3, children: /* @__PURE__ */ jsxRuntime.jsx(Link__default.default, { href: "/user-settings", children: "View user settings \u2192" }) })
2308
2340
  ] });
2309
2341
  UserSettingsCard.displayName = "UserSettingsCard";
2310
- var UsersIcon = (props) => /* @__PURE__ */ jsxRuntime.jsxs(
2342
+ var UsersIcon = (props) => /* @__PURE__ */ jsxRuntime.jsx(
2311
2343
  "svg",
2312
2344
  {
2313
2345
  xmlns: "http://www.w3.org/2000/svg",
@@ -2315,17 +2347,14 @@ var UsersIcon = (props) => /* @__PURE__ */ jsxRuntime.jsxs(
2315
2347
  fill: "none",
2316
2348
  stroke: "currentColor",
2317
2349
  strokeWidth: 1.5,
2350
+ strokeLinecap: "round",
2351
+ strokeLinejoin: "round",
2318
2352
  "aria-hidden": "true",
2319
2353
  ...props,
2320
- children: [
2321
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2" }),
2322
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: 10, cy: 8, r: 4 }),
2323
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M20 21v-2a4 4 0 0 0-3-3.87" }),
2324
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M17 3a4 4 0 0 1 0 8" })
2325
- ]
2354
+ children: /* @__PURE__ */ jsxRuntime.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" })
2326
2355
  }
2327
2356
  );
2328
- var KeyIcon = (props) => /* @__PURE__ */ jsxRuntime.jsxs(
2357
+ var KeyIcon = (props) => /* @__PURE__ */ jsxRuntime.jsx(
2329
2358
  "svg",
2330
2359
  {
2331
2360
  xmlns: "http://www.w3.org/2000/svg",
@@ -2333,13 +2362,11 @@ var KeyIcon = (props) => /* @__PURE__ */ jsxRuntime.jsxs(
2333
2362
  fill: "none",
2334
2363
  stroke: "currentColor",
2335
2364
  strokeWidth: 1.5,
2365
+ strokeLinecap: "round",
2366
+ strokeLinejoin: "round",
2336
2367
  "aria-hidden": "true",
2337
2368
  ...props,
2338
- children: [
2339
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: 7, cy: 15, r: 4 }),
2340
- /* @__PURE__ */ jsxRuntime.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" }),
2341
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16 11l1.5 1.5" })
2342
- ]
2369
+ children: /* @__PURE__ */ jsxRuntime.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" })
2343
2370
  }
2344
2371
  );
2345
2372
  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)]";