@replicated/portal-components 0.0.21 → 0.0.22
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/dist/actions/change-team.js +39 -0
- package/dist/actions/change-team.js.map +1 -1
- package/dist/actions/index.d.mts +1 -1
- package/dist/actions/index.d.ts +1 -1
- package/dist/actions/index.js +40 -0
- package/dist/actions/index.js.map +1 -1
- package/dist/actions/install-actions.d.mts +1 -1
- package/dist/actions/install-actions.d.ts +1 -1
- package/dist/actions/install-actions.js +39 -0
- package/dist/actions/install-actions.js.map +1 -1
- package/dist/actions/service-account.d.mts +1 -1
- package/dist/actions/service-account.d.ts +1 -1
- package/dist/actions/service-account.js +39 -0
- package/dist/actions/service-account.js.map +1 -1
- package/dist/actions/support-bundles.d.mts +1 -1
- package/dist/actions/support-bundles.d.ts +1 -1
- package/dist/actions/support-bundles.js +39 -0
- package/dist/actions/support-bundles.js.map +1 -1
- package/dist/actions/team-settings.d.mts +1 -1
- package/dist/actions/team-settings.d.ts +1 -1
- package/dist/actions/team-settings.js +39 -0
- package/dist/actions/team-settings.js.map +1 -1
- package/dist/actions/trial-signup.js +39 -0
- package/dist/actions/trial-signup.js.map +1 -1
- package/dist/actions/user-settings.d.mts +1 -1
- package/dist/actions/user-settings.d.ts +1 -1
- package/dist/actions/user-settings.js +39 -0
- package/dist/actions/user-settings.js.map +1 -1
- package/dist/airgap-instances.d.mts +1 -1
- package/dist/airgap-instances.d.ts +1 -1
- package/dist/airgap-instances.js +3 -2
- package/dist/airgap-instances.js.map +1 -1
- package/dist/esm/actions/change-team.js +39 -0
- package/dist/esm/actions/change-team.js.map +1 -1
- package/dist/esm/actions/index.js +40 -1
- package/dist/esm/actions/index.js.map +1 -1
- package/dist/esm/actions/install-actions.js +39 -0
- package/dist/esm/actions/install-actions.js.map +1 -1
- package/dist/esm/actions/service-account.js +39 -0
- package/dist/esm/actions/service-account.js.map +1 -1
- package/dist/esm/actions/support-bundles.js +39 -0
- package/dist/esm/actions/support-bundles.js.map +1 -1
- package/dist/esm/actions/team-settings.js +39 -0
- package/dist/esm/actions/team-settings.js.map +1 -1
- package/dist/esm/actions/trial-signup.js +39 -0
- package/dist/esm/actions/trial-signup.js.map +1 -1
- package/dist/esm/actions/user-settings.js +39 -0
- package/dist/esm/actions/user-settings.js.map +1 -1
- package/dist/esm/airgap-instances.js +3 -2
- package/dist/esm/airgap-instances.js.map +1 -1
- package/dist/esm/helm-install-wizard.js +414 -189
- package/dist/esm/helm-install-wizard.js.map +1 -1
- package/dist/esm/index.js +89 -64
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/install-actions.js +39 -0
- package/dist/esm/install-actions.js.map +1 -1
- package/dist/esm/instance-card.js +2 -1
- package/dist/esm/instance-card.js.map +1 -1
- package/dist/esm/license-details.js +39 -0
- package/dist/esm/license-details.js.map +1 -1
- package/dist/esm/linux-install-wizard.js +310 -166
- package/dist/esm/linux-install-wizard.js.map +1 -1
- package/dist/esm/logout-action.js +187 -0
- package/dist/esm/logout-action.js.map +1 -0
- package/dist/esm/logout-button.js +32 -0
- package/dist/esm/logout-button.js.map +1 -0
- package/dist/esm/markdown-renderer.js +16 -0
- package/dist/esm/markdown-renderer.js.map +1 -0
- package/dist/esm/middleware.js +3 -3
- package/dist/esm/middleware.js.map +1 -1
- package/dist/esm/online-instance-list.js +3 -2
- package/dist/esm/online-instance-list.js.map +1 -1
- package/dist/esm/saml-callback-client.js +5 -2
- package/dist/esm/saml-callback-client.js.map +1 -1
- package/dist/esm/saml-handlers.js +104 -0
- package/dist/esm/saml-handlers.js.map +1 -1
- package/dist/esm/support-bundle-collection-card.js +3 -2
- package/dist/esm/support-bundle-collection-card.js.map +1 -1
- package/dist/esm/support-bundles-card.js +2 -2
- package/dist/esm/support-bundles-card.js.map +1 -1
- package/dist/esm/support-card.js +39 -0
- package/dist/esm/support-card.js.map +1 -1
- package/dist/esm/top-nav-menu-close.js +46 -0
- package/dist/esm/top-nav-menu-close.js.map +1 -0
- package/dist/esm/top-nav.js +149 -59
- package/dist/esm/top-nav.js.map +1 -1
- package/dist/esm/trial-signup.js +6 -3
- package/dist/esm/trial-signup.js.map +1 -1
- package/dist/esm/update-layout.js +149 -59
- package/dist/esm/update-layout.js.map +1 -1
- package/dist/esm/upload-support-bundle-modal.js +2 -2
- package/dist/esm/upload-support-bundle-modal.js.map +1 -1
- package/dist/esm/user-menu-dropdown.js +52 -0
- package/dist/esm/user-menu-dropdown.js.map +1 -0
- package/dist/esm/user-settings.js +5 -5
- package/dist/esm/user-settings.js.map +1 -1
- package/dist/esm/utils/index.js +39 -0
- package/dist/esm/utils/index.js.map +1 -1
- package/dist/helm-install-wizard.d.mts +18 -7
- package/dist/helm-install-wizard.d.ts +18 -7
- package/dist/helm-install-wizard.js +418 -189
- package/dist/helm-install-wizard.js.map +1 -1
- package/dist/{index-sMbq94M7.d.ts → index-DXy7RxOX.d.ts} +18 -1
- package/dist/{index-DyzJ0yKD.d.mts → index-JX9-CIMA.d.mts} +18 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +89 -64
- package/dist/index.js.map +1 -1
- package/dist/install-actions.d.mts +2 -2
- package/dist/install-actions.d.ts +2 -2
- package/dist/install-actions.js +39 -0
- package/dist/install-actions.js.map +1 -1
- package/dist/instance-card.d.mts +1 -1
- package/dist/instance-card.d.ts +1 -1
- package/dist/instance-card.js +2 -1
- package/dist/instance-card.js.map +1 -1
- package/dist/license-details.js +39 -0
- package/dist/license-details.js.map +1 -1
- package/dist/linux-install-wizard.d.mts +17 -7
- package/dist/linux-install-wizard.d.ts +17 -7
- package/dist/linux-install-wizard.js +314 -166
- package/dist/linux-install-wizard.js.map +1 -1
- package/dist/logout-action.d.mts +7 -0
- package/dist/logout-action.d.ts +7 -0
- package/dist/logout-action.js +189 -0
- package/dist/logout-action.js.map +1 -0
- package/dist/logout-button.d.mts +16 -0
- package/dist/logout-button.d.ts +16 -0
- package/dist/logout-button.js +34 -0
- package/dist/logout-button.js.map +1 -0
- package/dist/markdown-renderer.d.mts +12 -0
- package/dist/markdown-renderer.d.ts +12 -0
- package/dist/markdown-renderer.js +22 -0
- package/dist/markdown-renderer.js.map +1 -0
- package/dist/middleware.js +3 -3
- package/dist/middleware.js.map +1 -1
- package/dist/online-instance-list.d.mts +1 -1
- package/dist/online-instance-list.d.ts +1 -1
- package/dist/online-instance-list.js +3 -2
- package/dist/online-instance-list.js.map +1 -1
- package/dist/pending-installations.d.mts +1 -1
- package/dist/pending-installations.d.ts +1 -1
- package/dist/saml-callback-client.js +5 -2
- package/dist/saml-callback-client.js.map +1 -1
- package/dist/saml-handlers.js +104 -0
- package/dist/saml-handlers.js.map +1 -1
- package/dist/security-card.d.mts +1 -1
- package/dist/security-card.d.ts +1 -1
- package/dist/styles.css +39 -0
- package/dist/support-bundle-collection-card.js +3 -2
- package/dist/support-bundle-collection-card.js.map +1 -1
- package/dist/support-bundles-card.d.mts +2 -2
- package/dist/support-bundles-card.d.ts +2 -2
- package/dist/support-bundles-card.js +2 -2
- package/dist/support-bundles-card.js.map +1 -1
- package/dist/support-card.js +39 -0
- package/dist/support-card.js.map +1 -1
- package/dist/top-nav-menu-close.d.mts +10 -0
- package/dist/top-nav-menu-close.d.ts +10 -0
- package/dist/top-nav-menu-close.js +48 -0
- package/dist/top-nav-menu-close.js.map +1 -0
- package/dist/top-nav.js +149 -59
- package/dist/top-nav.js.map +1 -1
- package/dist/trial-signup.js +6 -3
- package/dist/trial-signup.js.map +1 -1
- package/dist/update-layout.js +149 -59
- package/dist/update-layout.js.map +1 -1
- package/dist/upload-support-bundle-modal.js +2 -2
- package/dist/upload-support-bundle-modal.js.map +1 -1
- package/dist/user-menu-dropdown.d.mts +25 -0
- package/dist/user-menu-dropdown.d.ts +25 -0
- package/dist/user-menu-dropdown.js +59 -0
- package/dist/user-menu-dropdown.js.map +1 -0
- package/dist/user-settings.js +5 -5
- package/dist/user-settings.js.map +1 -1
- package/dist/utils/index.d.mts +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.js +39 -0
- package/dist/utils/index.js.map +1 -1
- package/package.json +29 -2
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useEffect } from 'react';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Enterprise Portal Components
|
|
6
|
+
* This file is generated by tsup. Do not edit manually.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
function TopNavMenuClose() {
|
|
10
|
+
useEffect(() => {
|
|
11
|
+
const closeAllDetails = () => {
|
|
12
|
+
const openDetails = document.querySelectorAll("details[open]");
|
|
13
|
+
openDetails.forEach((details) => {
|
|
14
|
+
details.removeAttribute("open");
|
|
15
|
+
});
|
|
16
|
+
};
|
|
17
|
+
const handleLinkClick = () => {
|
|
18
|
+
closeAllDetails();
|
|
19
|
+
};
|
|
20
|
+
const handleClickOutside = (event) => {
|
|
21
|
+
const target = event.target;
|
|
22
|
+
const openDetails = document.querySelectorAll("details[open]");
|
|
23
|
+
openDetails.forEach((details) => {
|
|
24
|
+
if (!details.contains(target)) {
|
|
25
|
+
details.removeAttribute("open");
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
const menuLinks = document.querySelectorAll('details a[href^="/"]');
|
|
30
|
+
menuLinks.forEach((link) => {
|
|
31
|
+
link.addEventListener("click", handleLinkClick);
|
|
32
|
+
});
|
|
33
|
+
document.addEventListener("mousedown", handleClickOutside);
|
|
34
|
+
return () => {
|
|
35
|
+
menuLinks.forEach((link) => {
|
|
36
|
+
link.removeEventListener("click", handleLinkClick);
|
|
37
|
+
});
|
|
38
|
+
document.removeEventListener("mousedown", handleClickOutside);
|
|
39
|
+
};
|
|
40
|
+
}, []);
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export { TopNavMenuClose };
|
|
45
|
+
//# sourceMappingURL=top-nav-menu-close.js.map
|
|
46
|
+
//# sourceMappingURL=top-nav-menu-close.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/top-nav-menu-close.tsx"],"names":[],"mappings":";;;;;;;AAWO,SAAS,eAAA,GAAkB;AAChC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,kBAAkB,MAAM;AAE5B,MAAA,MAAM,WAAA,GAAc,QAAA,CAAS,gBAAA,CAAiB,eAAe,CAAA;AAC7D,MAAA,WAAA,CAAY,OAAA,CAAQ,CAAC,OAAA,KAAY;AAC/B,QAAA,OAAA,CAAQ,gBAAgB,MAAM,CAAA;AAAA,MAChC,CAAC,CAAA;AAAA,IACH,CAAA;AAEA,IAAA,MAAM,kBAAkB,MAAM;AAC5B,MAAA,eAAA,EAAgB;AAAA,IAClB,CAAA;AAEA,IAAA,MAAM,kBAAA,GAAqB,CAAC,KAAA,KAAsB;AAChD,MAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AAErB,MAAA,MAAM,WAAA,GAAc,QAAA,CAAS,gBAAA,CAAiB,eAAe,CAAA;AAC7D,MAAA,WAAA,CAAY,OAAA,CAAQ,CAAC,OAAA,KAAY;AAC/B,QAAA,IAAI,CAAC,OAAA,CAAQ,QAAA,CAAS,MAAM,CAAA,EAAG;AAC7B,UAAA,OAAA,CAAQ,gBAAgB,MAAM,CAAA;AAAA,QAChC;AAAA,MACF,CAAC,CAAA;AAAA,IACH,CAAA;AAGA,IAAA,MAAM,SAAA,GAAY,QAAA,CAAS,gBAAA,CAAiB,sBAAsB,CAAA;AAClE,IAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,IAAA,KAAS;AAC1B,MAAA,IAAA,CAAK,gBAAA,CAAiB,SAAS,eAAe,CAAA;AAAA,IAChD,CAAC,CAAA;AAGD,IAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,kBAAkB,CAAA;AAGzD,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,IAAA,KAAS;AAC1B,QAAA,IAAA,CAAK,mBAAA,CAAoB,SAAS,eAAe,CAAA;AAAA,MACnD,CAAC,CAAA;AACD,MAAA,QAAA,CAAS,mBAAA,CAAoB,aAAa,kBAAkB,CAAA;AAAA,IAC9D,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,IAAA;AACT","file":"top-nav-menu-close.js","sourcesContent":["\"use client\";\n\nimport { useEffect } from \"react\";\n\n/**\n * Client component that adds click handlers to close the user menu dropdown\n * when navigation links are clicked or when clicking outside. This runs after \n * the server-rendered menu is mounted.\n * \n * Works with any <details> dropdown element in the page.\n */\nexport function TopNavMenuClose() {\n useEffect(() => {\n const closeAllDetails = () => {\n // Find all open details elements and close them\n const openDetails = document.querySelectorAll(\"details[open]\");\n openDetails.forEach((details) => {\n details.removeAttribute(\"open\");\n });\n };\n\n const handleLinkClick = () => {\n closeAllDetails();\n };\n\n const handleClickOutside = (event: MouseEvent) => {\n const target = event.target as Node;\n // Check if click is outside all details elements\n const openDetails = document.querySelectorAll(\"details[open]\");\n openDetails.forEach((details) => {\n if (!details.contains(target)) {\n details.removeAttribute(\"open\");\n }\n });\n };\n\n // Add click handlers to all links in dropdown menus\n const menuLinks = document.querySelectorAll('details a[href^=\"/\"]');\n menuLinks.forEach((link) => {\n link.addEventListener(\"click\", handleLinkClick);\n });\n\n // Add click-outside handler\n document.addEventListener(\"mousedown\", handleClickOutside);\n\n // Cleanup\n return () => {\n menuLinks.forEach((link) => {\n link.removeEventListener(\"click\", handleLinkClick);\n });\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, []);\n\n return null;\n}\n"]}
|
package/dist/esm/top-nav.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import Link from 'next/link';
|
|
2
2
|
import { Buffer } from 'buffer';
|
|
3
3
|
import { cache } from 'react';
|
|
4
|
+
import { User } from 'lucide-react';
|
|
4
5
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
5
6
|
|
|
6
7
|
/**
|
|
@@ -20,6 +21,71 @@ __export(tracer_exports, {
|
|
|
20
21
|
});
|
|
21
22
|
var tracer_default;
|
|
22
23
|
|
|
24
|
+
// src/utils/api-client.ts
|
|
25
|
+
async function authenticatedFetch(url, options = {}) {
|
|
26
|
+
const { token, ...fetchOptions } = options;
|
|
27
|
+
const headers = new Headers(fetchOptions.headers);
|
|
28
|
+
if (token) {
|
|
29
|
+
headers.set("authorization", `Bearer ${token}`);
|
|
30
|
+
}
|
|
31
|
+
const response = await fetch(url, {
|
|
32
|
+
...fetchOptions,
|
|
33
|
+
headers
|
|
34
|
+
});
|
|
35
|
+
if (response.status === 401) {
|
|
36
|
+
await handle401();
|
|
37
|
+
}
|
|
38
|
+
if (response.status === 502 || response.status === 503 || response.status === 504) {
|
|
39
|
+
await handleServerError(response.status);
|
|
40
|
+
}
|
|
41
|
+
return response;
|
|
42
|
+
}
|
|
43
|
+
async function handle401() {
|
|
44
|
+
const { redirect } = await import('next/navigation');
|
|
45
|
+
return redirect("/?expired=1");
|
|
46
|
+
}
|
|
47
|
+
function isErrorPage(url) {
|
|
48
|
+
try {
|
|
49
|
+
const urlObj = new URL(url);
|
|
50
|
+
return urlObj.pathname === "/error";
|
|
51
|
+
} catch {
|
|
52
|
+
return url === "/error" || url.startsWith("/error?");
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
async function handleServerError(statusCode) {
|
|
56
|
+
const { redirect } = await import('next/navigation');
|
|
57
|
+
const { cookies } = await import('next/headers');
|
|
58
|
+
let sourceUrl;
|
|
59
|
+
try {
|
|
60
|
+
const { headers } = await import('next/headers');
|
|
61
|
+
const headersList = await headers();
|
|
62
|
+
const referer = headersList.get("referer");
|
|
63
|
+
const host = headersList.get("host");
|
|
64
|
+
const pathname = headersList.get("x-invoke-path") || headersList.get("x-forwarded-path");
|
|
65
|
+
if (referer && !isErrorPage(referer)) {
|
|
66
|
+
sourceUrl = referer;
|
|
67
|
+
} else if (host && pathname) {
|
|
68
|
+
const protocol = headersList.get("x-forwarded-proto") || "https";
|
|
69
|
+
sourceUrl = `${protocol}://${host}${pathname}`;
|
|
70
|
+
}
|
|
71
|
+
if (!sourceUrl || isErrorPage(sourceUrl)) {
|
|
72
|
+
const cookieStore = await cookies();
|
|
73
|
+
const preservedSource = cookieStore.get("portal_error_source");
|
|
74
|
+
if (preservedSource?.value) {
|
|
75
|
+
sourceUrl = decodeURIComponent(preservedSource.value);
|
|
76
|
+
cookieStore.delete("portal_error_source");
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
} catch (error) {
|
|
80
|
+
console.debug("[portal-components] Could not determine source URL", error);
|
|
81
|
+
}
|
|
82
|
+
const params = new URLSearchParams({ code: String(statusCode) });
|
|
83
|
+
if (sourceUrl) {
|
|
84
|
+
params.set("source", sourceUrl);
|
|
85
|
+
}
|
|
86
|
+
return redirect(`/error?${params.toString()}`);
|
|
87
|
+
}
|
|
88
|
+
|
|
23
89
|
// src/utils/constants.ts
|
|
24
90
|
var DEFAULT_PRIMARY_COLOR = "#4f46e5";
|
|
25
91
|
var DEFAULT_SECONDARY_COLOR = "#6366f1";
|
|
@@ -148,6 +214,84 @@ var fetchCustomBrandingImpl = async () => {
|
|
|
148
214
|
};
|
|
149
215
|
};
|
|
150
216
|
var fetchCustomBranding = cache(fetchCustomBrandingImpl);
|
|
217
|
+
var fetchDocumentationImpl = async () => {
|
|
218
|
+
const { cookies } = await import('next/headers');
|
|
219
|
+
const sessionStore = await cookies();
|
|
220
|
+
const session = sessionStore.get("portal_session");
|
|
221
|
+
const token = session?.value;
|
|
222
|
+
if (!token) {
|
|
223
|
+
throw new Error("Authentication required");
|
|
224
|
+
}
|
|
225
|
+
const url = `${getApiOrigin()}/enterprise-portal/documentation`;
|
|
226
|
+
if (process.env.NODE_ENV !== "production") {
|
|
227
|
+
console.debug(
|
|
228
|
+
"[portal-components] fetching documentation via %s (Enterprise Portal API)",
|
|
229
|
+
url
|
|
230
|
+
);
|
|
231
|
+
}
|
|
232
|
+
const response = await authenticatedFetch(url, {
|
|
233
|
+
method: "GET",
|
|
234
|
+
token,
|
|
235
|
+
headers: {
|
|
236
|
+
accept: "application/json"
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
if (!response.ok) {
|
|
240
|
+
throw new Error(
|
|
241
|
+
`Documentation request failed (${response.status} ${response.statusText})`
|
|
242
|
+
);
|
|
243
|
+
}
|
|
244
|
+
const data = await response.json();
|
|
245
|
+
return {
|
|
246
|
+
helmPreInstall: data.helmPreInstall || "",
|
|
247
|
+
helmPostInstall: data.helmPostInstall || "",
|
|
248
|
+
embeddedClusterPreInstall: data.embeddedClusterPreInstall || "",
|
|
249
|
+
embeddedClusterPostInstall: data.embeddedClusterPostInstall || "",
|
|
250
|
+
helmInstallUrl: data.helmInstallUrl || "",
|
|
251
|
+
embeddedClusterInstallUrl: data.embeddedClusterInstallUrl || "",
|
|
252
|
+
valuesOverrideUrl: data.valuesOverrideUrl || ""
|
|
253
|
+
};
|
|
254
|
+
};
|
|
255
|
+
cache(fetchDocumentationImpl);
|
|
256
|
+
function UserMenuDropdown({
|
|
257
|
+
displayLabel,
|
|
258
|
+
children,
|
|
259
|
+
className = ""
|
|
260
|
+
}) {
|
|
261
|
+
return /* @__PURE__ */ jsxs("details", { className: `group relative ${className}`, children: [
|
|
262
|
+
/* @__PURE__ */ jsxs("summary", { className: "flex cursor-pointer items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 transition-colors list-none border border-transparent hover:border-gray-200", children: [
|
|
263
|
+
/* @__PURE__ */ jsx(User, { className: "h-4 w-4" }),
|
|
264
|
+
/* @__PURE__ */ jsx("span", { children: displayLabel }),
|
|
265
|
+
/* @__PURE__ */ jsx(
|
|
266
|
+
"svg",
|
|
267
|
+
{
|
|
268
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
269
|
+
width: "16",
|
|
270
|
+
height: "16",
|
|
271
|
+
viewBox: "0 0 24 24",
|
|
272
|
+
fill: "none",
|
|
273
|
+
stroke: "currentColor",
|
|
274
|
+
strokeWidth: "2",
|
|
275
|
+
strokeLinecap: "round",
|
|
276
|
+
strokeLinejoin: "round",
|
|
277
|
+
className: "h-4 w-4 text-gray-500 transition-transform group-open:rotate-180",
|
|
278
|
+
children: /* @__PURE__ */ jsx("polyline", { points: "6 9 12 15 18 9" })
|
|
279
|
+
}
|
|
280
|
+
)
|
|
281
|
+
] }),
|
|
282
|
+
/* @__PURE__ */ jsx("div", { className: "absolute right-0 mt-2 w-52 rounded-lg border border-gray-200 bg-white py-1.5 shadow-xl z-50", children })
|
|
283
|
+
] });
|
|
284
|
+
}
|
|
285
|
+
function UserMenuItem({ href, children }) {
|
|
286
|
+
return /* @__PURE__ */ jsx(
|
|
287
|
+
Link,
|
|
288
|
+
{
|
|
289
|
+
href,
|
|
290
|
+
className: "block w-full px-4 py-2.5 text-sm text-gray-700 hover:bg-gray-50 transition-colors",
|
|
291
|
+
children
|
|
292
|
+
}
|
|
293
|
+
);
|
|
294
|
+
}
|
|
151
295
|
var defaultTopNavLinks = [
|
|
152
296
|
{
|
|
153
297
|
label: "Dashboard",
|
|
@@ -444,65 +588,11 @@ var TopNav = async ({
|
|
|
444
588
|
),
|
|
445
589
|
/* @__PURE__ */ jsx("span", { className: "text-xl font-bold text-gray-900", children: brandTitle || "Enterprise Portal" })
|
|
446
590
|
] }),
|
|
447
|
-
/* @__PURE__ */ jsxs(
|
|
448
|
-
/* @__PURE__ */
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
453
|
-
width: "16",
|
|
454
|
-
height: "16",
|
|
455
|
-
viewBox: "0 0 24 24",
|
|
456
|
-
fill: "none",
|
|
457
|
-
stroke: "currentColor",
|
|
458
|
-
strokeWidth: "2",
|
|
459
|
-
strokeLinecap: "round",
|
|
460
|
-
strokeLinejoin: "round",
|
|
461
|
-
className: "text-gray-500",
|
|
462
|
-
children: [
|
|
463
|
-
/* @__PURE__ */ jsx("path", { d: "M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2" }),
|
|
464
|
-
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "7", r: "4" })
|
|
465
|
-
]
|
|
466
|
-
}
|
|
467
|
-
),
|
|
468
|
-
/* @__PURE__ */ jsx("span", { children: displayLabel }),
|
|
469
|
-
/* @__PURE__ */ jsx(
|
|
470
|
-
"svg",
|
|
471
|
-
{
|
|
472
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
473
|
-
width: "16",
|
|
474
|
-
height: "16",
|
|
475
|
-
viewBox: "0 0 24 24",
|
|
476
|
-
fill: "none",
|
|
477
|
-
stroke: "currentColor",
|
|
478
|
-
strokeWidth: "2",
|
|
479
|
-
strokeLinecap: "round",
|
|
480
|
-
strokeLinejoin: "round",
|
|
481
|
-
className: "text-gray-500",
|
|
482
|
-
children: /* @__PURE__ */ jsx("polyline", { points: "6 9 12 15 18 9" })
|
|
483
|
-
}
|
|
484
|
-
)
|
|
485
|
-
] }),
|
|
486
|
-
/* @__PURE__ */ jsxs("div", { className: "absolute right-0 mt-2 w-48 rounded-md border border-gray-200 bg-white py-2 text-sm text-gray-700 shadow-lg z-50", children: [
|
|
487
|
-
/* @__PURE__ */ jsx(
|
|
488
|
-
Link,
|
|
489
|
-
{
|
|
490
|
-
href: "/user-settings",
|
|
491
|
-
className: "block w-full px-4 py-2 text-left hover:bg-gray-100",
|
|
492
|
-
children: "User settings"
|
|
493
|
-
}
|
|
494
|
-
),
|
|
495
|
-
/* @__PURE__ */ jsx(
|
|
496
|
-
Link,
|
|
497
|
-
{
|
|
498
|
-
href: "/team-settings",
|
|
499
|
-
className: "block w-full px-4 py-2 text-left hover:bg-gray-100",
|
|
500
|
-
children: "Team settings"
|
|
501
|
-
}
|
|
502
|
-
),
|
|
503
|
-
userMenuChildren,
|
|
504
|
-
logoutButton
|
|
505
|
-
] })
|
|
591
|
+
/* @__PURE__ */ jsxs(UserMenuDropdown, { displayLabel, children: [
|
|
592
|
+
/* @__PURE__ */ jsx(UserMenuItem, { href: "/user-settings", children: "User settings" }),
|
|
593
|
+
/* @__PURE__ */ jsx(UserMenuItem, { href: "/team-settings", children: "Team settings" }),
|
|
594
|
+
userMenuChildren,
|
|
595
|
+
logoutButton
|
|
506
596
|
] })
|
|
507
597
|
] }),
|
|
508
598
|
/* @__PURE__ */ jsx("div", { className: "mt-3 flex flex-wrap gap-3 pb-2 text-sm font-medium text-gray-500", children: resolvedLinks.map(({ label, icon, href }) => {
|