@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,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client component that adds click handlers to close the user menu dropdown
|
|
3
|
+
* when navigation links are clicked or when clicking outside. This runs after
|
|
4
|
+
* the server-rendered menu is mounted.
|
|
5
|
+
*
|
|
6
|
+
* Works with any <details> dropdown element in the page.
|
|
7
|
+
*/
|
|
8
|
+
declare function TopNavMenuClose(): null;
|
|
9
|
+
|
|
10
|
+
export { TopNavMenuClose };
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var react = require('react');
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Enterprise Portal Components
|
|
8
|
+
* This file is generated by tsup. Do not edit manually.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
function TopNavMenuClose() {
|
|
12
|
+
react.useEffect(() => {
|
|
13
|
+
const closeAllDetails = () => {
|
|
14
|
+
const openDetails = document.querySelectorAll("details[open]");
|
|
15
|
+
openDetails.forEach((details) => {
|
|
16
|
+
details.removeAttribute("open");
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
const handleLinkClick = () => {
|
|
20
|
+
closeAllDetails();
|
|
21
|
+
};
|
|
22
|
+
const handleClickOutside = (event) => {
|
|
23
|
+
const target = event.target;
|
|
24
|
+
const openDetails = document.querySelectorAll("details[open]");
|
|
25
|
+
openDetails.forEach((details) => {
|
|
26
|
+
if (!details.contains(target)) {
|
|
27
|
+
details.removeAttribute("open");
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
};
|
|
31
|
+
const menuLinks = document.querySelectorAll('details a[href^="/"]');
|
|
32
|
+
menuLinks.forEach((link) => {
|
|
33
|
+
link.addEventListener("click", handleLinkClick);
|
|
34
|
+
});
|
|
35
|
+
document.addEventListener("mousedown", handleClickOutside);
|
|
36
|
+
return () => {
|
|
37
|
+
menuLinks.forEach((link) => {
|
|
38
|
+
link.removeEventListener("click", handleLinkClick);
|
|
39
|
+
});
|
|
40
|
+
document.removeEventListener("mousedown", handleClickOutside);
|
|
41
|
+
};
|
|
42
|
+
}, []);
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
exports.TopNavMenuClose = TopNavMenuClose;
|
|
47
|
+
//# sourceMappingURL=top-nav-menu-close.js.map
|
|
48
|
+
//# sourceMappingURL=top-nav-menu-close.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/top-nav-menu-close.tsx"],"names":["useEffect"],"mappings":";;;;;;;;;AAWO,SAAS,eAAA,GAAkB;AAChC,EAAAA,eAAA,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/top-nav.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
var Link = require('next/link');
|
|
4
4
|
var buffer = require('buffer');
|
|
5
5
|
var react = require('react');
|
|
6
|
+
var lucideReact = require('lucide-react');
|
|
6
7
|
var jsxRuntime = require('react/jsx-runtime');
|
|
7
8
|
|
|
8
9
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
@@ -26,6 +27,71 @@ __export(tracer_exports, {
|
|
|
26
27
|
});
|
|
27
28
|
var tracer_default;
|
|
28
29
|
|
|
30
|
+
// src/utils/api-client.ts
|
|
31
|
+
async function authenticatedFetch(url, options = {}) {
|
|
32
|
+
const { token, ...fetchOptions } = options;
|
|
33
|
+
const headers = new Headers(fetchOptions.headers);
|
|
34
|
+
if (token) {
|
|
35
|
+
headers.set("authorization", `Bearer ${token}`);
|
|
36
|
+
}
|
|
37
|
+
const response = await fetch(url, {
|
|
38
|
+
...fetchOptions,
|
|
39
|
+
headers
|
|
40
|
+
});
|
|
41
|
+
if (response.status === 401) {
|
|
42
|
+
await handle401();
|
|
43
|
+
}
|
|
44
|
+
if (response.status === 502 || response.status === 503 || response.status === 504) {
|
|
45
|
+
await handleServerError(response.status);
|
|
46
|
+
}
|
|
47
|
+
return response;
|
|
48
|
+
}
|
|
49
|
+
async function handle401() {
|
|
50
|
+
const { redirect } = await import('next/navigation');
|
|
51
|
+
return redirect("/?expired=1");
|
|
52
|
+
}
|
|
53
|
+
function isErrorPage(url) {
|
|
54
|
+
try {
|
|
55
|
+
const urlObj = new URL(url);
|
|
56
|
+
return urlObj.pathname === "/error";
|
|
57
|
+
} catch {
|
|
58
|
+
return url === "/error" || url.startsWith("/error?");
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
async function handleServerError(statusCode) {
|
|
62
|
+
const { redirect } = await import('next/navigation');
|
|
63
|
+
const { cookies } = await import('next/headers');
|
|
64
|
+
let sourceUrl;
|
|
65
|
+
try {
|
|
66
|
+
const { headers } = await import('next/headers');
|
|
67
|
+
const headersList = await headers();
|
|
68
|
+
const referer = headersList.get("referer");
|
|
69
|
+
const host = headersList.get("host");
|
|
70
|
+
const pathname = headersList.get("x-invoke-path") || headersList.get("x-forwarded-path");
|
|
71
|
+
if (referer && !isErrorPage(referer)) {
|
|
72
|
+
sourceUrl = referer;
|
|
73
|
+
} else if (host && pathname) {
|
|
74
|
+
const protocol = headersList.get("x-forwarded-proto") || "https";
|
|
75
|
+
sourceUrl = `${protocol}://${host}${pathname}`;
|
|
76
|
+
}
|
|
77
|
+
if (!sourceUrl || isErrorPage(sourceUrl)) {
|
|
78
|
+
const cookieStore = await cookies();
|
|
79
|
+
const preservedSource = cookieStore.get("portal_error_source");
|
|
80
|
+
if (preservedSource?.value) {
|
|
81
|
+
sourceUrl = decodeURIComponent(preservedSource.value);
|
|
82
|
+
cookieStore.delete("portal_error_source");
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
} catch (error) {
|
|
86
|
+
console.debug("[portal-components] Could not determine source URL", error);
|
|
87
|
+
}
|
|
88
|
+
const params = new URLSearchParams({ code: String(statusCode) });
|
|
89
|
+
if (sourceUrl) {
|
|
90
|
+
params.set("source", sourceUrl);
|
|
91
|
+
}
|
|
92
|
+
return redirect(`/error?${params.toString()}`);
|
|
93
|
+
}
|
|
94
|
+
|
|
29
95
|
// src/utils/constants.ts
|
|
30
96
|
var DEFAULT_PRIMARY_COLOR = "#4f46e5";
|
|
31
97
|
var DEFAULT_SECONDARY_COLOR = "#6366f1";
|
|
@@ -154,6 +220,84 @@ var fetchCustomBrandingImpl = async () => {
|
|
|
154
220
|
};
|
|
155
221
|
};
|
|
156
222
|
var fetchCustomBranding = react.cache(fetchCustomBrandingImpl);
|
|
223
|
+
var fetchDocumentationImpl = async () => {
|
|
224
|
+
const { cookies } = await import('next/headers');
|
|
225
|
+
const sessionStore = await cookies();
|
|
226
|
+
const session = sessionStore.get("portal_session");
|
|
227
|
+
const token = session?.value;
|
|
228
|
+
if (!token) {
|
|
229
|
+
throw new Error("Authentication required");
|
|
230
|
+
}
|
|
231
|
+
const url = `${getApiOrigin()}/enterprise-portal/documentation`;
|
|
232
|
+
if (process.env.NODE_ENV !== "production") {
|
|
233
|
+
console.debug(
|
|
234
|
+
"[portal-components] fetching documentation via %s (Enterprise Portal API)",
|
|
235
|
+
url
|
|
236
|
+
);
|
|
237
|
+
}
|
|
238
|
+
const response = await authenticatedFetch(url, {
|
|
239
|
+
method: "GET",
|
|
240
|
+
token,
|
|
241
|
+
headers: {
|
|
242
|
+
accept: "application/json"
|
|
243
|
+
}
|
|
244
|
+
});
|
|
245
|
+
if (!response.ok) {
|
|
246
|
+
throw new Error(
|
|
247
|
+
`Documentation request failed (${response.status} ${response.statusText})`
|
|
248
|
+
);
|
|
249
|
+
}
|
|
250
|
+
const data = await response.json();
|
|
251
|
+
return {
|
|
252
|
+
helmPreInstall: data.helmPreInstall || "",
|
|
253
|
+
helmPostInstall: data.helmPostInstall || "",
|
|
254
|
+
embeddedClusterPreInstall: data.embeddedClusterPreInstall || "",
|
|
255
|
+
embeddedClusterPostInstall: data.embeddedClusterPostInstall || "",
|
|
256
|
+
helmInstallUrl: data.helmInstallUrl || "",
|
|
257
|
+
embeddedClusterInstallUrl: data.embeddedClusterInstallUrl || "",
|
|
258
|
+
valuesOverrideUrl: data.valuesOverrideUrl || ""
|
|
259
|
+
};
|
|
260
|
+
};
|
|
261
|
+
react.cache(fetchDocumentationImpl);
|
|
262
|
+
function UserMenuDropdown({
|
|
263
|
+
displayLabel,
|
|
264
|
+
children,
|
|
265
|
+
className = ""
|
|
266
|
+
}) {
|
|
267
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("details", { className: `group relative ${className}`, children: [
|
|
268
|
+
/* @__PURE__ */ jsxRuntime.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: [
|
|
269
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.User, { className: "h-4 w-4" }),
|
|
270
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: displayLabel }),
|
|
271
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
272
|
+
"svg",
|
|
273
|
+
{
|
|
274
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
275
|
+
width: "16",
|
|
276
|
+
height: "16",
|
|
277
|
+
viewBox: "0 0 24 24",
|
|
278
|
+
fill: "none",
|
|
279
|
+
stroke: "currentColor",
|
|
280
|
+
strokeWidth: "2",
|
|
281
|
+
strokeLinecap: "round",
|
|
282
|
+
strokeLinejoin: "round",
|
|
283
|
+
className: "h-4 w-4 text-gray-500 transition-transform group-open:rotate-180",
|
|
284
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "6 9 12 15 18 9" })
|
|
285
|
+
}
|
|
286
|
+
)
|
|
287
|
+
] }),
|
|
288
|
+
/* @__PURE__ */ jsxRuntime.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 })
|
|
289
|
+
] });
|
|
290
|
+
}
|
|
291
|
+
function UserMenuItem({ href, children }) {
|
|
292
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
293
|
+
Link__default.default,
|
|
294
|
+
{
|
|
295
|
+
href,
|
|
296
|
+
className: "block w-full px-4 py-2.5 text-sm text-gray-700 hover:bg-gray-50 transition-colors",
|
|
297
|
+
children
|
|
298
|
+
}
|
|
299
|
+
);
|
|
300
|
+
}
|
|
157
301
|
var defaultTopNavLinks = [
|
|
158
302
|
{
|
|
159
303
|
label: "Dashboard",
|
|
@@ -450,65 +594,11 @@ var TopNav = async ({
|
|
|
450
594
|
),
|
|
451
595
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xl font-bold text-gray-900", children: brandTitle || "Enterprise Portal" })
|
|
452
596
|
] }),
|
|
453
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
454
|
-
/* @__PURE__ */ jsxRuntime.
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
459
|
-
width: "16",
|
|
460
|
-
height: "16",
|
|
461
|
-
viewBox: "0 0 24 24",
|
|
462
|
-
fill: "none",
|
|
463
|
-
stroke: "currentColor",
|
|
464
|
-
strokeWidth: "2",
|
|
465
|
-
strokeLinecap: "round",
|
|
466
|
-
strokeLinejoin: "round",
|
|
467
|
-
className: "text-gray-500",
|
|
468
|
-
children: [
|
|
469
|
-
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2" }),
|
|
470
|
-
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "7", r: "4" })
|
|
471
|
-
]
|
|
472
|
-
}
|
|
473
|
-
),
|
|
474
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { children: displayLabel }),
|
|
475
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
476
|
-
"svg",
|
|
477
|
-
{
|
|
478
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
479
|
-
width: "16",
|
|
480
|
-
height: "16",
|
|
481
|
-
viewBox: "0 0 24 24",
|
|
482
|
-
fill: "none",
|
|
483
|
-
stroke: "currentColor",
|
|
484
|
-
strokeWidth: "2",
|
|
485
|
-
strokeLinecap: "round",
|
|
486
|
-
strokeLinejoin: "round",
|
|
487
|
-
className: "text-gray-500",
|
|
488
|
-
children: /* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "6 9 12 15 18 9" })
|
|
489
|
-
}
|
|
490
|
-
)
|
|
491
|
-
] }),
|
|
492
|
-
/* @__PURE__ */ jsxRuntime.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: [
|
|
493
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
494
|
-
Link__default.default,
|
|
495
|
-
{
|
|
496
|
-
href: "/user-settings",
|
|
497
|
-
className: "block w-full px-4 py-2 text-left hover:bg-gray-100",
|
|
498
|
-
children: "User settings"
|
|
499
|
-
}
|
|
500
|
-
),
|
|
501
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
502
|
-
Link__default.default,
|
|
503
|
-
{
|
|
504
|
-
href: "/team-settings",
|
|
505
|
-
className: "block w-full px-4 py-2 text-left hover:bg-gray-100",
|
|
506
|
-
children: "Team settings"
|
|
507
|
-
}
|
|
508
|
-
),
|
|
509
|
-
userMenuChildren,
|
|
510
|
-
logoutButton
|
|
511
|
-
] })
|
|
597
|
+
/* @__PURE__ */ jsxRuntime.jsxs(UserMenuDropdown, { displayLabel, children: [
|
|
598
|
+
/* @__PURE__ */ jsxRuntime.jsx(UserMenuItem, { href: "/user-settings", children: "User settings" }),
|
|
599
|
+
/* @__PURE__ */ jsxRuntime.jsx(UserMenuItem, { href: "/team-settings", children: "Team settings" }),
|
|
600
|
+
userMenuChildren,
|
|
601
|
+
logoutButton
|
|
512
602
|
] })
|
|
513
603
|
] }),
|
|
514
604
|
/* @__PURE__ */ jsxRuntime.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 }) => {
|