@replicated/portal-components 0.0.19 → 0.0.21
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 +66 -7
- package/dist/actions/change-team.js.map +1 -1
- package/dist/actions/index.d.mts +3 -1
- package/dist/actions/index.d.ts +3 -1
- package/dist/actions/index.js +182 -465
- package/dist/actions/index.js.map +1 -1
- package/dist/actions/install-actions.d.mts +3 -1
- package/dist/actions/install-actions.d.ts +3 -1
- package/dist/actions/install-actions.js +58 -5
- package/dist/actions/install-actions.js.map +1 -1
- package/dist/actions/service-account.d.mts +3 -1
- package/dist/actions/service-account.d.ts +3 -1
- package/dist/actions/service-account.js +58 -5
- package/dist/actions/service-account.js.map +1 -1
- package/dist/actions/support-bundles.d.mts +3 -1
- package/dist/actions/support-bundles.d.ts +3 -1
- package/dist/actions/support-bundles.js +58 -5
- package/dist/actions/support-bundles.js.map +1 -1
- package/dist/actions/team-settings.d.mts +3 -1
- package/dist/actions/team-settings.d.ts +3 -1
- package/dist/actions/team-settings.js +91 -27
- package/dist/actions/team-settings.js.map +1 -1
- package/dist/actions/trial-signup.d.mts +24 -0
- package/dist/actions/trial-signup.d.ts +24 -0
- package/dist/actions/trial-signup.js +482 -0
- package/dist/actions/trial-signup.js.map +1 -0
- package/dist/actions/user-settings.d.mts +3 -1
- package/dist/actions/user-settings.d.ts +3 -1
- package/dist/actions/user-settings.js +58 -5
- package/dist/actions/user-settings.js.map +1 -1
- package/dist/airgap-instances.d.mts +3 -1
- package/dist/airgap-instances.d.ts +3 -1
- package/dist/airgap-instances.js +41 -112
- package/dist/airgap-instances.js.map +1 -1
- package/dist/branding-BsMSywts.d.mts +36 -0
- package/dist/branding-BsMSywts.d.ts +36 -0
- package/dist/error-page.js +10 -2
- package/dist/error-page.js.map +1 -1
- package/dist/error.js +10 -2
- package/dist/error.js.map +1 -1
- package/dist/esm/actions/change-team.js +66 -7
- package/dist/esm/actions/change-team.js.map +1 -1
- package/dist/esm/actions/index.js +181 -462
- package/dist/esm/actions/index.js.map +1 -1
- package/dist/esm/actions/install-actions.js +58 -5
- package/dist/esm/actions/install-actions.js.map +1 -1
- package/dist/esm/actions/service-account.js +58 -5
- package/dist/esm/actions/service-account.js.map +1 -1
- package/dist/esm/actions/support-bundles.js +58 -5
- package/dist/esm/actions/support-bundles.js.map +1 -1
- package/dist/esm/actions/team-settings.js +91 -27
- package/dist/esm/actions/team-settings.js.map +1 -1
- package/dist/esm/actions/trial-signup.js +478 -0
- package/dist/esm/actions/trial-signup.js.map +1 -0
- package/dist/esm/actions/user-settings.js +58 -5
- package/dist/esm/actions/user-settings.js.map +1 -1
- package/dist/esm/airgap-instances.js +40 -112
- package/dist/esm/airgap-instances.js.map +1 -1
- package/dist/esm/error-page.js +10 -2
- package/dist/esm/error-page.js.map +1 -1
- package/dist/esm/error.js +10 -2
- package/dist/esm/error.js.map +1 -1
- package/dist/esm/helm-install-wizard.js +118 -79
- package/dist/esm/helm-install-wizard.js.map +1 -1
- package/dist/esm/index.js +706 -438
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/install-actions.js +40 -5
- package/dist/esm/install-actions.js.map +1 -1
- package/dist/esm/install-card.js +9 -6
- package/dist/esm/install-card.js.map +1 -1
- package/dist/esm/install-targets.js +9 -2
- package/dist/esm/install-targets.js.map +1 -1
- package/dist/esm/instance-card.js +39 -111
- package/dist/esm/instance-card.js.map +1 -1
- package/dist/esm/join-team.js +9 -3
- package/dist/esm/join-team.js.map +1 -1
- package/dist/esm/license-card.js +24 -22
- package/dist/esm/license-card.js.map +1 -1
- package/dist/esm/license-details.js +128 -334
- package/dist/esm/license-details.js.map +1 -1
- package/dist/esm/linux-install-wizard.js +95 -41
- package/dist/esm/linux-install-wizard.js.map +1 -1
- package/dist/esm/login.js +20 -4
- package/dist/esm/login.js.map +1 -1
- package/dist/esm/middleware.js +33 -0
- package/dist/esm/middleware.js.map +1 -0
- package/dist/esm/online-instance-list.js +40 -112
- package/dist/esm/online-instance-list.js.map +1 -1
- package/dist/esm/release-history-panel.js +27 -14
- package/dist/esm/release-history-panel.js.map +1 -1
- package/dist/esm/saml-callback-client.js +82 -0
- package/dist/esm/saml-callback-client.js.map +1 -0
- package/dist/esm/saml-handlers.js +138 -0
- package/dist/esm/saml-handlers.js.map +1 -0
- package/dist/esm/security-card.js +53 -38
- package/dist/esm/security-card.js.map +1 -1
- package/dist/esm/service-accounts-tab.js +800 -0
- package/dist/esm/service-accounts-tab.js.map +1 -0
- package/dist/esm/support-bundle-collection-card.js +48 -24
- package/dist/esm/support-bundle-collection-card.js.map +1 -1
- package/dist/esm/support-bundles-card.js +10 -5
- package/dist/esm/support-bundles-card.js.map +1 -1
- package/dist/esm/support-card.js +37 -5
- package/dist/esm/support-card.js.map +1 -1
- package/dist/esm/team-selection.js +5 -1
- package/dist/esm/team-selection.js.map +1 -1
- package/dist/esm/team-settings-card.js +5 -2
- package/dist/esm/team-settings-card.js.map +1 -1
- package/dist/esm/team-settings.js +7 -2
- package/dist/esm/team-settings.js.map +1 -1
- package/dist/esm/top-nav-user-menu.js +5 -1
- package/dist/esm/top-nav-user-menu.js.map +1 -1
- package/dist/esm/top-nav.js +175 -62
- package/dist/esm/top-nav.js.map +1 -1
- package/dist/esm/trial-signup.js +256 -0
- package/dist/esm/trial-signup.js.map +1 -0
- package/dist/esm/update-layout.js +175 -62
- package/dist/esm/update-layout.js.map +1 -1
- package/dist/esm/updates-card.js +15 -4
- package/dist/esm/updates-card.js.map +1 -1
- package/dist/esm/upload-support-bundle-modal.js +9 -4
- package/dist/esm/upload-support-bundle-modal.js.map +1 -1
- package/dist/esm/user-settings-card.js +5 -2
- package/dist/esm/user-settings-card.js.map +1 -1
- package/dist/esm/user-settings.js +12 -6
- package/dist/esm/user-settings.js.map +1 -1
- package/dist/esm/utils/index.js +204 -13
- package/dist/esm/utils/index.js.map +1 -1
- package/dist/fetch-license-iTyF7_GY.d.mts +81 -0
- package/dist/fetch-license-iTyF7_GY.d.ts +81 -0
- package/dist/helm-install-wizard.d.mts +11 -3
- package/dist/helm-install-wizard.d.ts +11 -3
- package/dist/helm-install-wizard.js +118 -79
- package/dist/helm-install-wizard.js.map +1 -1
- package/dist/{index-BAiVrSSR.d.mts → index-DyzJ0yKD.d.mts} +48 -50
- package/dist/{index-DWt-N5od.d.ts → index-sMbq94M7.d.ts} +48 -50
- package/dist/index.d.mts +8 -2
- package/dist/index.d.ts +8 -2
- package/dist/index.js +726 -438
- package/dist/index.js.map +1 -1
- package/dist/install-actions.d.mts +4 -2
- package/dist/install-actions.d.ts +4 -2
- package/dist/install-actions.js +40 -5
- package/dist/install-actions.js.map +1 -1
- package/dist/install-card.d.mts +2 -3
- package/dist/install-card.d.ts +2 -3
- package/dist/install-card.js +9 -6
- package/dist/install-card.js.map +1 -1
- package/dist/install-targets.js +9 -2
- package/dist/install-targets.js.map +1 -1
- package/dist/instance-card.d.mts +3 -1
- package/dist/instance-card.d.ts +3 -1
- package/dist/instance-card.js +40 -111
- package/dist/instance-card.js.map +1 -1
- package/dist/join-team.js +9 -3
- package/dist/join-team.js.map +1 -1
- package/dist/license-card.d.mts +2 -3
- package/dist/license-card.d.ts +2 -3
- package/dist/license-card.js +24 -22
- package/dist/license-card.js.map +1 -1
- package/dist/license-details.js +128 -334
- package/dist/license-details.js.map +1 -1
- package/dist/linux-install-wizard.d.mts +9 -3
- package/dist/linux-install-wizard.d.ts +9 -3
- package/dist/linux-install-wizard.js +95 -41
- package/dist/linux-install-wizard.js.map +1 -1
- package/dist/login.d.mts +4 -0
- package/dist/login.d.ts +4 -0
- package/dist/login.js +20 -4
- package/dist/login.js.map +1 -1
- package/dist/middleware.d.mts +13 -0
- package/dist/middleware.d.ts +13 -0
- package/dist/middleware.js +35 -0
- package/dist/middleware.js.map +1 -0
- package/dist/online-instance-list.d.mts +3 -1
- package/dist/online-instance-list.d.ts +3 -1
- package/dist/online-instance-list.js +41 -112
- package/dist/online-instance-list.js.map +1 -1
- package/dist/pending-installations.d.mts +3 -1
- package/dist/pending-installations.d.ts +3 -1
- package/dist/release-history-panel.js +27 -14
- package/dist/release-history-panel.js.map +1 -1
- package/dist/saml-callback-client.d.mts +36 -0
- package/dist/saml-callback-client.d.ts +36 -0
- package/dist/saml-callback-client.js +88 -0
- package/dist/saml-callback-client.js.map +1 -0
- package/dist/saml-handlers.d.mts +50 -0
- package/dist/saml-handlers.d.ts +50 -0
- package/dist/saml-handlers.js +141 -0
- package/dist/saml-handlers.js.map +1 -0
- package/dist/security-card.d.mts +3 -1
- package/dist/security-card.d.ts +3 -1
- package/dist/security-card.js +53 -38
- package/dist/security-card.js.map +1 -1
- package/dist/service-accounts-tab.d.mts +51 -0
- package/dist/service-accounts-tab.d.ts +51 -0
- package/dist/service-accounts-tab.js +802 -0
- package/dist/service-accounts-tab.js.map +1 -0
- package/dist/styles.css +375 -127
- package/dist/support-bundle-collection-card.d.mts +1 -1
- package/dist/support-bundle-collection-card.d.ts +1 -1
- package/dist/support-bundle-collection-card.js +47 -23
- package/dist/support-bundle-collection-card.js.map +1 -1
- package/dist/support-bundles-card.d.mts +4 -2
- package/dist/support-bundles-card.d.ts +4 -2
- package/dist/support-bundles-card.js +10 -5
- package/dist/support-bundles-card.js.map +1 -1
- package/dist/support-card.js +37 -5
- package/dist/support-card.js.map +1 -1
- package/dist/team-selection.js +5 -1
- package/dist/team-selection.js.map +1 -1
- package/dist/team-settings-card.js +5 -2
- package/dist/team-settings-card.js.map +1 -1
- package/dist/team-settings.js +7 -2
- package/dist/team-settings.js.map +1 -1
- package/dist/{top-nav-IRIn66wS.d.ts → top-nav-BUQAGoG1.d.mts} +14 -2
- package/dist/{top-nav-IRIn66wS.d.mts → top-nav-CEqw0KpO.d.ts} +14 -2
- package/dist/top-nav-user-menu.js +5 -1
- package/dist/top-nav-user-menu.js.map +1 -1
- package/dist/top-nav.d.mts +2 -1
- package/dist/top-nav.d.ts +2 -1
- package/dist/top-nav.js +175 -62
- package/dist/top-nav.js.map +1 -1
- package/dist/trial-signup.d.mts +31 -0
- package/dist/trial-signup.d.ts +31 -0
- package/dist/trial-signup.js +258 -0
- package/dist/trial-signup.js.map +1 -0
- package/dist/update-layout.js +175 -62
- package/dist/update-layout.js.map +1 -1
- package/dist/updates-card.js +15 -4
- package/dist/updates-card.js.map +1 -1
- package/dist/upload-support-bundle-modal.js +9 -4
- package/dist/upload-support-bundle-modal.js.map +1 -1
- package/dist/user-settings-card.js +5 -2
- package/dist/user-settings-card.js.map +1 -1
- package/dist/user-settings.js +12 -6
- package/dist/user-settings.js.map +1 -1
- package/dist/utils/index.d.mts +74 -16
- package/dist/utils/index.d.ts +74 -16
- package/dist/utils/index.js +215 -12
- package/dist/utils/index.js.map +1 -1
- package/package.json +37 -2
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useState, useTransition } from 'react';
|
|
3
|
+
import { useRouter } from 'next/navigation';
|
|
4
|
+
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Enterprise Portal Components
|
|
8
|
+
* This file is generated by tsup. Do not edit manually.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
function TrialSignup({
|
|
12
|
+
appSlug,
|
|
13
|
+
branding,
|
|
14
|
+
trialExpirationDays,
|
|
15
|
+
licenseType,
|
|
16
|
+
termsAndConditionsUrl,
|
|
17
|
+
defaultTitle = "Enterprise Portal",
|
|
18
|
+
createTrialSignup,
|
|
19
|
+
verifyTrialSignup
|
|
20
|
+
}) {
|
|
21
|
+
const [companyName, setCompanyName] = useState("");
|
|
22
|
+
const [email, setEmail] = useState("");
|
|
23
|
+
const [isCodeSent, setIsCodeSent] = useState(false);
|
|
24
|
+
const [validationCode, setValidationCode] = useState("");
|
|
25
|
+
const [termsAccepted, setTermsAccepted] = useState(false);
|
|
26
|
+
const [showTermsError, setShowTermsError] = useState(false);
|
|
27
|
+
const [error, setError] = useState("");
|
|
28
|
+
const [isPending, startTransition] = useTransition();
|
|
29
|
+
const router = useRouter();
|
|
30
|
+
const primaryColor = branding?.primaryColor || "#6366f1";
|
|
31
|
+
const secondaryColor = branding?.secondaryColor || "#6366f1";
|
|
32
|
+
const handleSubmit = async (e) => {
|
|
33
|
+
e.preventDefault();
|
|
34
|
+
setError("");
|
|
35
|
+
setShowTermsError(false);
|
|
36
|
+
if (termsAndConditionsUrl && !termsAccepted) {
|
|
37
|
+
setShowTermsError(true);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
startTransition(async () => {
|
|
41
|
+
const result = await createTrialSignup({
|
|
42
|
+
appSlug,
|
|
43
|
+
company: companyName,
|
|
44
|
+
email
|
|
45
|
+
});
|
|
46
|
+
if (result.success) {
|
|
47
|
+
setIsCodeSent(true);
|
|
48
|
+
} else {
|
|
49
|
+
setError(result.error || "An error occurred. Please try again.");
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
};
|
|
53
|
+
const handleValidateCode = async (e) => {
|
|
54
|
+
e.preventDefault();
|
|
55
|
+
setError("");
|
|
56
|
+
startTransition(async () => {
|
|
57
|
+
const result = await verifyTrialSignup(validationCode);
|
|
58
|
+
if (result.success && result.redirectUrl) {
|
|
59
|
+
router.push(result.redirectUrl);
|
|
60
|
+
router.refresh();
|
|
61
|
+
} else {
|
|
62
|
+
setError(result.error || "Verification failed. Please try again.");
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
};
|
|
66
|
+
const handleUseDifferentEmail = () => {
|
|
67
|
+
setIsCodeSent(false);
|
|
68
|
+
setCompanyName("");
|
|
69
|
+
setEmail("");
|
|
70
|
+
setValidationCode("");
|
|
71
|
+
setError("");
|
|
72
|
+
};
|
|
73
|
+
return /* @__PURE__ */ jsxs("div", { className: "w-[480px] rounded-lg border-2 border-solid p-8", style: { borderColor: secondaryColor, minHeight: branding?.logo ? "342px" : "242px" }, children: [
|
|
74
|
+
branding?.logo && /* @__PURE__ */ jsx("div", { className: "flex justify-center mb-4", children: /* @__PURE__ */ jsx(
|
|
75
|
+
"img",
|
|
76
|
+
{
|
|
77
|
+
src: branding.logo,
|
|
78
|
+
alt: branding?.title || "Logo",
|
|
79
|
+
className: "max-w-[360px] max-h-[48px]"
|
|
80
|
+
}
|
|
81
|
+
) }),
|
|
82
|
+
/* @__PURE__ */ jsx("h1", { className: "text-2xl font-bold text-center mb-2", children: branding?.title || defaultTitle }),
|
|
83
|
+
/* @__PURE__ */ jsx("p", { className: "text-center text-gray-600 mb-6", children: licenseType === "community" ? "Get your community license" : `Start your ${trialExpirationDays} day trial` }),
|
|
84
|
+
!isCodeSent && /* @__PURE__ */ jsxs("form", { onSubmit: handleSubmit, className: "w-full", children: [
|
|
85
|
+
/* @__PURE__ */ jsxs("div", { className: "mb-4", children: [
|
|
86
|
+
/* @__PURE__ */ jsx("label", { htmlFor: "company-name", className: "block mb-2 text-gray-600", children: "Company name" }),
|
|
87
|
+
/* @__PURE__ */ jsxs("div", { className: "relative", children: [
|
|
88
|
+
/* @__PURE__ */ jsx(
|
|
89
|
+
"svg",
|
|
90
|
+
{
|
|
91
|
+
className: "absolute w-5 h-5 text-gray-400 pointer-events-none",
|
|
92
|
+
style: { left: "12px", top: "50%", transform: "translateY(-50%)" },
|
|
93
|
+
fill: "none",
|
|
94
|
+
stroke: "currentColor",
|
|
95
|
+
viewBox: "0 0 24 24",
|
|
96
|
+
children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0h5M9 7h1m-1 4h1m4-4h1m-1 4h1m-5 10v-5a1 1 0 011-1h2a1 1 0 011 1v5m-4 0h4" })
|
|
97
|
+
}
|
|
98
|
+
),
|
|
99
|
+
/* @__PURE__ */ jsx(
|
|
100
|
+
"input",
|
|
101
|
+
{
|
|
102
|
+
id: "company-name",
|
|
103
|
+
type: "text",
|
|
104
|
+
placeholder: "Your company",
|
|
105
|
+
className: "portal-input w-full py-2.5",
|
|
106
|
+
style: { paddingLeft: "44px" },
|
|
107
|
+
value: companyName,
|
|
108
|
+
onChange: (e) => setCompanyName(e.target.value),
|
|
109
|
+
required: true,
|
|
110
|
+
disabled: isPending
|
|
111
|
+
}
|
|
112
|
+
)
|
|
113
|
+
] })
|
|
114
|
+
] }),
|
|
115
|
+
/* @__PURE__ */ jsxs("div", { className: "mb-4", children: [
|
|
116
|
+
/* @__PURE__ */ jsx("label", { htmlFor: "email", className: "block mb-2 text-gray-600", children: "Work email address" }),
|
|
117
|
+
/* @__PURE__ */ jsxs("div", { className: "relative", children: [
|
|
118
|
+
/* @__PURE__ */ jsx(
|
|
119
|
+
"svg",
|
|
120
|
+
{
|
|
121
|
+
className: "absolute w-5 h-5 text-gray-400 pointer-events-none",
|
|
122
|
+
style: { left: "12px", top: "50%", transform: "translateY(-50%)" },
|
|
123
|
+
fill: "none",
|
|
124
|
+
stroke: "currentColor",
|
|
125
|
+
viewBox: "0 0 24 24",
|
|
126
|
+
children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z" })
|
|
127
|
+
}
|
|
128
|
+
),
|
|
129
|
+
/* @__PURE__ */ jsx(
|
|
130
|
+
"input",
|
|
131
|
+
{
|
|
132
|
+
id: "email",
|
|
133
|
+
type: "email",
|
|
134
|
+
placeholder: "you@company.com",
|
|
135
|
+
className: "portal-input w-full py-2.5",
|
|
136
|
+
style: { paddingLeft: "44px" },
|
|
137
|
+
value: email,
|
|
138
|
+
onChange: (e) => setEmail(e.target.value),
|
|
139
|
+
required: true,
|
|
140
|
+
disabled: isPending
|
|
141
|
+
}
|
|
142
|
+
)
|
|
143
|
+
] })
|
|
144
|
+
] }),
|
|
145
|
+
termsAndConditionsUrl && /* @__PURE__ */ jsx("div", { className: "mb-4", children: /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-3", children: [
|
|
146
|
+
/* @__PURE__ */ jsx(
|
|
147
|
+
"input",
|
|
148
|
+
{
|
|
149
|
+
type: "checkbox",
|
|
150
|
+
id: "terms-checkbox",
|
|
151
|
+
checked: termsAccepted,
|
|
152
|
+
onChange: (e) => {
|
|
153
|
+
setTermsAccepted(e.target.checked);
|
|
154
|
+
if (e.target.checked) {
|
|
155
|
+
setShowTermsError(false);
|
|
156
|
+
}
|
|
157
|
+
},
|
|
158
|
+
className: "mt-1 min-w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500",
|
|
159
|
+
required: true,
|
|
160
|
+
disabled: isPending
|
|
161
|
+
}
|
|
162
|
+
),
|
|
163
|
+
/* @__PURE__ */ jsxs("label", { htmlFor: "terms-checkbox", className: "text-sm text-gray-600 leading-relaxed", children: [
|
|
164
|
+
"I agree to the",
|
|
165
|
+
" ",
|
|
166
|
+
/* @__PURE__ */ jsx(
|
|
167
|
+
"a",
|
|
168
|
+
{
|
|
169
|
+
href: termsAndConditionsUrl,
|
|
170
|
+
target: "_blank",
|
|
171
|
+
rel: "noopener noreferrer",
|
|
172
|
+
className: "text-blue-600 hover:underline font-medium",
|
|
173
|
+
style: { color: primaryColor },
|
|
174
|
+
children: "Terms and Conditions"
|
|
175
|
+
}
|
|
176
|
+
)
|
|
177
|
+
] })
|
|
178
|
+
] }) }),
|
|
179
|
+
showTermsError && /* @__PURE__ */ jsx("div", { className: "text-red-600 mb-4 text-center text-sm", children: "Please accept the Terms and Conditions to continue." }),
|
|
180
|
+
error && /* @__PURE__ */ jsx("div", { className: "text-red-600 mb-4 text-center text-sm", children: error }),
|
|
181
|
+
/* @__PURE__ */ jsx(
|
|
182
|
+
"button",
|
|
183
|
+
{
|
|
184
|
+
type: "submit",
|
|
185
|
+
className: "w-full flex justify-center items-center bg-blue-600 hover:bg-blue-700 text-white py-2 rounded font-medium transition-colors disabled:opacity-50 disabled:cursor-not-allowed",
|
|
186
|
+
style: { background: primaryColor, borderColor: primaryColor },
|
|
187
|
+
disabled: !companyName.trim() || !email.trim() || isPending || !!termsAndConditionsUrl && !termsAccepted,
|
|
188
|
+
children: isPending ? "Creating account..." : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
189
|
+
"Create account",
|
|
190
|
+
/* @__PURE__ */ jsx("svg", { className: "ml-2 h-4 w-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M14 5l7 7m0 0l-7 7m7-7H3" }) })
|
|
191
|
+
] })
|
|
192
|
+
}
|
|
193
|
+
),
|
|
194
|
+
/* @__PURE__ */ jsx(
|
|
195
|
+
"a",
|
|
196
|
+
{
|
|
197
|
+
href: "/login",
|
|
198
|
+
className: "hover:underline font-semibold mt-4 text-center cursor-pointer block",
|
|
199
|
+
style: { color: secondaryColor },
|
|
200
|
+
children: "Already have an account? Sign in"
|
|
201
|
+
}
|
|
202
|
+
)
|
|
203
|
+
] }),
|
|
204
|
+
isCodeSent && /* @__PURE__ */ jsxs("form", { onSubmit: handleValidateCode, className: "w-full", children: [
|
|
205
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
206
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between mb-1", children: [
|
|
207
|
+
/* @__PURE__ */ jsx("label", { htmlFor: "code", className: "block text-sm font-medium text-gray-700", children: "Verification code" }),
|
|
208
|
+
/* @__PURE__ */ jsx(
|
|
209
|
+
"button",
|
|
210
|
+
{
|
|
211
|
+
type: "button",
|
|
212
|
+
onClick: handleUseDifferentEmail,
|
|
213
|
+
className: "text-sm text-blue-600 hover:text-blue-700 hover:underline",
|
|
214
|
+
style: { color: primaryColor },
|
|
215
|
+
children: "Use different email"
|
|
216
|
+
}
|
|
217
|
+
)
|
|
218
|
+
] }),
|
|
219
|
+
/* @__PURE__ */ jsx("div", { className: "mt-1", children: /* @__PURE__ */ jsx(
|
|
220
|
+
"input",
|
|
221
|
+
{
|
|
222
|
+
id: "code",
|
|
223
|
+
name: "code",
|
|
224
|
+
type: "text",
|
|
225
|
+
value: validationCode,
|
|
226
|
+
onChange: (e) => setValidationCode(e.target.value),
|
|
227
|
+
className: "portal-input w-full",
|
|
228
|
+
placeholder: "Enter 12-digit code",
|
|
229
|
+
required: true,
|
|
230
|
+
disabled: isPending
|
|
231
|
+
}
|
|
232
|
+
) }),
|
|
233
|
+
/* @__PURE__ */ jsxs("p", { className: "mt-2 text-sm text-gray-600 mb-4 text-pretty", children: [
|
|
234
|
+
"A verification code has been sent to ",
|
|
235
|
+
email,
|
|
236
|
+
". Please check your inbox."
|
|
237
|
+
] })
|
|
238
|
+
] }),
|
|
239
|
+
error && /* @__PURE__ */ jsx("div", { className: "text-red-600 mb-4 text-center text-sm", children: error }),
|
|
240
|
+
/* @__PURE__ */ jsx(
|
|
241
|
+
"button",
|
|
242
|
+
{
|
|
243
|
+
type: "submit",
|
|
244
|
+
className: "w-full bg-blue-600 hover:bg-blue-700 text-white py-2 rounded font-medium transition-colors disabled:opacity-50 disabled:cursor-not-allowed",
|
|
245
|
+
style: { background: primaryColor, borderColor: primaryColor },
|
|
246
|
+
disabled: !validationCode.trim() || isPending,
|
|
247
|
+
children: isPending ? "Verifying..." : licenseType === "community" ? "Verify code and get license" : "Verify code and start trial"
|
|
248
|
+
}
|
|
249
|
+
)
|
|
250
|
+
] })
|
|
251
|
+
] });
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
export { TrialSignup };
|
|
255
|
+
//# sourceMappingURL=trial-signup.js.map
|
|
256
|
+
//# sourceMappingURL=trial-signup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/trial-signup.tsx"],"names":[],"mappings":";;;;;;;;;AA6BO,SAAS,WAAA,CAAY;AAAA,EAC1B,OAAA;AAAA,EACA,QAAA;AAAA,EACA,mBAAA;AAAA,EACA,WAAA;AAAA,EACA,qBAAA;AAAA,EACA,YAAA,GAAe,mBAAA;AAAA,EACf,iBAAA;AAAA,EACA;AACF,CAAA,EAAqB;AACnB,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAS,EAAE,CAAA;AACjD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAS,EAAE,CAAA;AACrC,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAI,SAAS,EAAE,CAAA;AACvD,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAS,KAAK,CAAA;AACxD,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAI,SAAS,KAAK,CAAA;AAC1D,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAS,EAAE,CAAA;AACrC,EAAA,MAAM,CAAC,SAAA,EAAW,eAAe,CAAA,GAAI,aAAA,EAAc;AACnD,EAAA,MAAM,SAAS,SAAA,EAAU;AAEzB,EAAA,MAAM,YAAA,GAAe,UAAU,YAAA,IAAgB,SAAA;AAC/C,EAAA,MAAM,cAAA,GAAiB,UAAU,cAAA,IAAkB,SAAA;AAEnD,EAAA,MAAM,YAAA,GAAe,OAAO,CAAA,KAAiB;AAC3C,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,QAAA,CAAS,EAAE,CAAA;AACX,IAAA,iBAAA,CAAkB,KAAK,CAAA;AAGvB,IAAA,IAAI,qBAAA,IAAyB,CAAC,aAAA,EAAe;AAC3C,MAAA,iBAAA,CAAkB,IAAI,CAAA;AACtB,MAAA;AAAA,IACF;AAEA,IAAA,eAAA,CAAgB,YAAY;AAC1B,MAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,CAAkB;AAAA,QACrC,OAAA;AAAA,QACA,OAAA,EAAS,WAAA;AAAA,QACT;AAAA,OACD,CAAA;AAED,MAAA,IAAI,OAAO,OAAA,EAAS;AAClB,QAAA,aAAA,CAAc,IAAI,CAAA;AAAA,MACpB,CAAA,MAAO;AACL,QAAA,QAAA,CAAS,MAAA,CAAO,SAAS,sCAAsC,CAAA;AAAA,MACjE;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,kBAAA,GAAqB,OAAO,CAAA,KAAiB;AACjD,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,QAAA,CAAS,EAAE,CAAA;AAEX,IAAA,eAAA,CAAgB,YAAY;AAC1B,MAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,CAAkB,cAAc,CAAA;AAErD,MAAA,IAAI,MAAA,CAAO,OAAA,IAAW,MAAA,CAAO,WAAA,EAAa;AAExC,QAAA,MAAA,CAAO,IAAA,CAAK,OAAO,WAAW,CAAA;AAC9B,QAAA,MAAA,CAAO,OAAA,EAAQ;AAAA,MACjB,CAAA,MAAO;AACL,QAAA,QAAA,CAAS,MAAA,CAAO,SAAS,wCAAwC,CAAA;AAAA,MACnE;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,0BAA0B,MAAM;AACpC,IAAA,aAAA,CAAc,KAAK,CAAA;AACnB,IAAA,cAAA,CAAe,EAAE,CAAA;AACjB,IAAA,QAAA,CAAS,EAAE,CAAA;AACX,IAAA,iBAAA,CAAkB,EAAE,CAAA;AACpB,IAAA,QAAA,CAAS,EAAE,CAAA;AAAA,EACb,CAAA;AAEA,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gDAAA,EAAiD,KAAA,EAAO,EAAE,WAAA,EAAa,cAAA,EAAgB,SAAA,EAAW,QAAA,EAAU,IAAA,GAAO,OAAA,GAAU,SAAQ,EAEjJ,QAAA,EAAA;AAAA,IAAA,QAAA,EAAU,IAAA,oBACT,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EACb,QAAA,kBAAA,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,KAAK,QAAA,CAAS,IAAA;AAAA,QACd,GAAA,EAAK,UAAU,KAAA,IAAS,MAAA;AAAA,QACxB,SAAA,EAAU;AAAA;AAAA,KACZ,EACF,CAAA;AAAA,wBAID,IAAA,EAAA,EAAG,SAAA,EAAU,qCAAA,EACX,QAAA,EAAA,QAAA,EAAU,SAAS,YAAA,EACtB,CAAA;AAAA,oBAGA,GAAA,CAAC,OAAE,SAAA,EAAU,gCAAA,EACV,0BAAgB,WAAA,GACb,4BAAA,GACA,CAAA,WAAA,EAAc,mBAAmB,CAAA,UAAA,CAAA,EACvC,CAAA;AAAA,IAGC,CAAC,UAAA,oBACA,IAAA,CAAC,UAAK,QAAA,EAAU,YAAA,EAAc,WAAU,QAAA,EAEtC,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,MAAA,EACb,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,OAAA,EAAA,EAAM,OAAA,EAAQ,cAAA,EAAe,SAAA,EAAU,4BAA2B,QAAA,EAAA,cAAA,EAEnE,CAAA;AAAA,wBACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EACb,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,oDAAA;AAAA,cACV,OAAO,EAAE,IAAA,EAAM,QAAQ,GAAA,EAAK,KAAA,EAAO,WAAW,kBAAA,EAAmB;AAAA,cACjE,IAAA,EAAK,MAAA;AAAA,cACL,MAAA,EAAO,cAAA;AAAA,cACP,OAAA,EAAQ,WAAA;AAAA,cAER,QAAA,kBAAA,GAAA,CAAC,UAAK,aAAA,EAAc,OAAA,EAAQ,gBAAe,OAAA,EAAQ,WAAA,EAAa,CAAA,EAAG,CAAA,EAAE,2IAAA,EAA4I;AAAA;AAAA,WACnN;AAAA,0BACA,GAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,EAAA,EAAG,cAAA;AAAA,cACH,IAAA,EAAK,MAAA;AAAA,cACL,WAAA,EAAY,cAAA;AAAA,cACZ,SAAA,EAAU,4BAAA;AAAA,cACV,KAAA,EAAO,EAAE,WAAA,EAAa,MAAA,EAAO;AAAA,cAC7B,KAAA,EAAO,WAAA;AAAA,cACP,UAAU,CAAC,CAAA,KAAM,cAAA,CAAe,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,cAC9C,QAAA,EAAQ,IAAA;AAAA,cACR,QAAA,EAAU;AAAA;AAAA;AACZ,SAAA,EACF;AAAA,OAAA,EACF,CAAA;AAAA,sBAGA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EACb,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,OAAA,EAAA,EAAM,OAAA,EAAQ,OAAA,EAAQ,SAAA,EAAU,4BAA2B,QAAA,EAAA,oBAAA,EAE5D,CAAA;AAAA,wBACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EACb,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,oDAAA;AAAA,cACV,OAAO,EAAE,IAAA,EAAM,QAAQ,GAAA,EAAK,KAAA,EAAO,WAAW,kBAAA,EAAmB;AAAA,cACjE,IAAA,EAAK,MAAA;AAAA,cACL,MAAA,EAAO,cAAA;AAAA,cACP,OAAA,EAAQ,WAAA;AAAA,cAER,QAAA,kBAAA,GAAA,CAAC,UAAK,aAAA,EAAc,OAAA,EAAQ,gBAAe,OAAA,EAAQ,WAAA,EAAa,CAAA,EAAG,CAAA,EAAE,sGAAA,EAAuG;AAAA;AAAA,WAC9K;AAAA,0BACA,GAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,EAAA,EAAG,OAAA;AAAA,cACH,IAAA,EAAK,OAAA;AAAA,cACL,WAAA,EAAY,iBAAA;AAAA,cACZ,SAAA,EAAU,4BAAA;AAAA,cACV,KAAA,EAAO,EAAE,WAAA,EAAa,MAAA,EAAO;AAAA,cAC7B,KAAA,EAAO,KAAA;AAAA,cACP,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,cACxC,QAAA,EAAQ,IAAA;AAAA,cACR,QAAA,EAAU;AAAA;AAAA;AACZ,SAAA,EACF;AAAA,OAAA,EACF,CAAA;AAAA,MAGC,qBAAA,wBACE,KAAA,EAAA,EAAI,SAAA,EAAU,QACb,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wBAAA,EACb,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,UAAA;AAAA,YACL,EAAA,EAAG,gBAAA;AAAA,YACH,OAAA,EAAS,aAAA;AAAA,YACT,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,cAAA,gBAAA,CAAiB,CAAA,CAAE,OAAO,OAAO,CAAA;AACjC,cAAA,IAAI,CAAA,CAAE,OAAO,OAAA,EAAS;AACpB,gBAAA,iBAAA,CAAkB,KAAK,CAAA;AAAA,cACzB;AAAA,YACF,CAAA;AAAA,YACA,SAAA,EAAU,4EAAA;AAAA,YACV,QAAA,EAAQ,IAAA;AAAA,YACR,QAAA,EAAU;AAAA;AAAA,SACZ;AAAA,wBACA,IAAA,CAAC,OAAA,EAAA,EAAM,OAAA,EAAQ,gBAAA,EAAiB,WAAU,uCAAA,EAAwC,QAAA,EAAA;AAAA,UAAA,gBAAA;AAAA,UACjE,GAAA;AAAA,0BACf,GAAA;AAAA,YAAC,GAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAM,qBAAA;AAAA,cACN,MAAA,EAAO,QAAA;AAAA,cACP,GAAA,EAAI,qBAAA;AAAA,cACJ,SAAA,EAAU,2CAAA;AAAA,cACV,KAAA,EAAO,EAAE,KAAA,EAAO,YAAA,EAAa;AAAA,cAC9B,QAAA,EAAA;AAAA;AAAA;AAED,SAAA,EACF;AAAA,OAAA,EACF,CAAA,EACF,CAAA;AAAA,MAID,cAAA,oBACC,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCAAwC,QAAA,EAAA,qDAAA,EAEvD,CAAA;AAAA,MAID,KAAA,oBACC,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCACZ,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,sBAIF,GAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,SAAA,EAAU,6KAAA;AAAA,UACV,KAAA,EAAO,EAAE,UAAA,EAAY,YAAA,EAAc,aAAa,YAAA,EAAa;AAAA,UAC7D,QAAA,EACE,CAAC,WAAA,CAAY,IAAA,EAAK,IAClB,CAAC,KAAA,CAAM,IAAA,EAAK,IACZ,SAAA,IACC,CAAC,CAAC,yBAAyB,CAAC,aAAA;AAAA,UAG9B,QAAA,EAAA,SAAA,GACC,wCAEA,IAAA,CAAA,QAAA,EAAA,EAAE,QAAA,EAAA;AAAA,YAAA,gBAAA;AAAA,4BAEA,GAAA,CAAC,SAAI,SAAA,EAAU,cAAA,EAAe,MAAK,MAAA,EAAO,MAAA,EAAO,gBAAe,OAAA,EAAQ,WAAA,EACtE,8BAAC,MAAA,EAAA,EAAK,aAAA,EAAc,SAAQ,cAAA,EAAe,OAAA,EAAQ,aAAa,CAAA,EAAG,CAAA,EAAE,4BAA2B,CAAA,EAClG;AAAA,WAAA,EACF;AAAA;AAAA,OAEJ;AAAA,sBAGA,GAAA;AAAA,QAAC,GAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,SAAA,EAAU,qEAAA;AAAA,UACV,KAAA,EAAO,EAAE,KAAA,EAAO,cAAA,EAAe;AAAA,UAChC,QAAA,EAAA;AAAA;AAAA;AAED,KAAA,EACF,CAAA;AAAA,IAID,8BACC,IAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAU,kBAAA,EAAoB,WAAU,QAAA,EAC5C,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wCAAA,EACb,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,OAAA,EAAA,EAAM,OAAA,EAAQ,MAAA,EAAO,SAAA,EAAU,2CAA0C,QAAA,EAAA,mBAAA,EAE1E,CAAA;AAAA,0BACA,GAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS,uBAAA;AAAA,cACT,SAAA,EAAU,2DAAA;AAAA,cACV,KAAA,EAAO,EAAE,KAAA,EAAO,YAAA,EAAa;AAAA,cAC9B,QAAA,EAAA;AAAA;AAAA;AAED,SAAA,EACF,CAAA;AAAA,wBACA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EACb,QAAA,kBAAA,GAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAG,MAAA;AAAA,YACH,IAAA,EAAK,MAAA;AAAA,YACL,IAAA,EAAK,MAAA;AAAA,YACL,KAAA,EAAO,cAAA;AAAA,YACP,UAAU,CAAC,CAAA,KAAM,iBAAA,CAAkB,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YACjD,SAAA,EAAU,qBAAA;AAAA,YACV,WAAA,EAAY,qBAAA;AAAA,YACZ,QAAA,EAAQ,IAAA;AAAA,YACR,QAAA,EAAU;AAAA;AAAA,SACZ,EACF,CAAA;AAAA,wBACA,IAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,6CAAA,EAA8C,QAAA,EAAA;AAAA,UAAA,uCAAA;AAAA,UACnB,KAAA;AAAA,UAAM;AAAA,SAAA,EAC9C;AAAA,OAAA,EACF,CAAA;AAAA,MAGC,KAAA,oBACC,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCACZ,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,sBAIF,GAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,SAAA,EAAU,4IAAA;AAAA,UACV,KAAA,EAAO,EAAE,UAAA,EAAY,YAAA,EAAc,aAAa,YAAA,EAAa;AAAA,UAC7D,QAAA,EAAU,CAAC,cAAA,CAAe,IAAA,EAAK,IAAK,SAAA;AAAA,UAEnC,QAAA,EAAA,SAAA,GACG,cAAA,GACA,WAAA,KAAgB,WAAA,GACd,6BAAA,GACA;AAAA;AAAA;AACR,KAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ","file":"trial-signup.js","sourcesContent":["\"use client\";\n\nimport { useState, useTransition, FormEvent } from \"react\";\nimport { useRouter } from \"next/navigation\";\n\nexport interface TrialSignupProps {\n appSlug: string;\n branding: {\n logo?: string;\n title?: string;\n primaryColor?: string;\n secondaryColor?: string;\n } | null;\n trialExpirationDays: number;\n licenseType: string;\n termsAndConditionsUrl: string;\n defaultTitle?: string;\n createTrialSignup: (payload: {\n appSlug: string;\n company: string;\n email: string;\n }) => Promise<{ success: boolean; error?: string }>;\n verifyTrialSignup: (code: string) => Promise<{\n success: boolean;\n error?: string;\n redirectUrl?: string;\n }>;\n}\n\nexport function TrialSignup({\n appSlug,\n branding,\n trialExpirationDays,\n licenseType,\n termsAndConditionsUrl,\n defaultTitle = \"Enterprise Portal\",\n createTrialSignup,\n verifyTrialSignup,\n}: TrialSignupProps) {\n const [companyName, setCompanyName] = useState(\"\");\n const [email, setEmail] = useState(\"\");\n const [isCodeSent, setIsCodeSent] = useState(false);\n const [validationCode, setValidationCode] = useState(\"\");\n const [termsAccepted, setTermsAccepted] = useState(false);\n const [showTermsError, setShowTermsError] = useState(false);\n const [error, setError] = useState(\"\");\n const [isPending, startTransition] = useTransition();\n const router = useRouter();\n\n const primaryColor = branding?.primaryColor || \"#6366f1\";\n const secondaryColor = branding?.secondaryColor || \"#6366f1\";\n\n const handleSubmit = async (e: FormEvent) => {\n e.preventDefault();\n setError(\"\");\n setShowTermsError(false);\n\n // Validate terms acceptance if required\n if (termsAndConditionsUrl && !termsAccepted) {\n setShowTermsError(true);\n return;\n }\n\n startTransition(async () => {\n const result = await createTrialSignup({\n appSlug,\n company: companyName,\n email,\n });\n\n if (result.success) {\n setIsCodeSent(true);\n } else {\n setError(result.error || \"An error occurred. Please try again.\");\n }\n });\n };\n\n const handleValidateCode = async (e: FormEvent) => {\n e.preventDefault();\n setError(\"\");\n\n startTransition(async () => {\n const result = await verifyTrialSignup(validationCode);\n\n if (result.success && result.redirectUrl) {\n // Redirect to dashboard\n router.push(result.redirectUrl);\n router.refresh();\n } else {\n setError(result.error || \"Verification failed. Please try again.\");\n }\n });\n };\n\n const handleUseDifferentEmail = () => {\n setIsCodeSent(false);\n setCompanyName(\"\");\n setEmail(\"\");\n setValidationCode(\"\");\n setError(\"\");\n };\n\n return (\n <div className=\"w-[480px] rounded-lg border-2 border-solid p-8\" style={{ borderColor: secondaryColor, minHeight: branding?.logo ? \"342px\" : \"242px\" }}>\n {/* Logo */}\n {branding?.logo && (\n <div className=\"flex justify-center mb-4\">\n <img\n src={branding.logo}\n alt={branding?.title || \"Logo\"}\n className=\"max-w-[360px] max-h-[48px]\"\n />\n </div>\n )}\n\n {/* Title */}\n <h1 className=\"text-2xl font-bold text-center mb-2\">\n {branding?.title || defaultTitle}\n </h1>\n\n {/* Subtitle */}\n <p className=\"text-center text-gray-600 mb-6\">\n {licenseType === \"community\"\n ? \"Get your community license\"\n : `Start your ${trialExpirationDays} day trial`}\n </p>\n\n {/* Step 1: Company and Email Form */}\n {!isCodeSent && (\n <form onSubmit={handleSubmit} className=\"w-full\">\n {/* Company Name */}\n <div className=\"mb-4\">\n <label htmlFor=\"company-name\" className=\"block mb-2 text-gray-600\">\n Company name\n </label>\n <div className=\"relative\">\n <svg \n className=\"absolute w-5 h-5 text-gray-400 pointer-events-none\" \n style={{ left: \"12px\", top: \"50%\", transform: \"translateY(-50%)\" }}\n fill=\"none\" \n stroke=\"currentColor\" \n viewBox=\"0 0 24 24\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0h5M9 7h1m-1 4h1m4-4h1m-1 4h1m-5 10v-5a1 1 0 011-1h2a1 1 0 011 1v5m-4 0h4\" />\n </svg>\n <input\n id=\"company-name\"\n type=\"text\"\n placeholder=\"Your company\"\n className=\"portal-input w-full py-2.5\"\n style={{ paddingLeft: \"44px\" }}\n value={companyName}\n onChange={(e) => setCompanyName(e.target.value)}\n required\n disabled={isPending}\n />\n </div>\n </div>\n\n {/* Email */}\n <div className=\"mb-4\">\n <label htmlFor=\"email\" className=\"block mb-2 text-gray-600\">\n Work email address\n </label>\n <div className=\"relative\">\n <svg \n className=\"absolute w-5 h-5 text-gray-400 pointer-events-none\" \n style={{ left: \"12px\", top: \"50%\", transform: \"translateY(-50%)\" }}\n fill=\"none\" \n stroke=\"currentColor\" \n viewBox=\"0 0 24 24\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\" />\n </svg>\n <input\n id=\"email\"\n type=\"email\"\n placeholder=\"you@company.com\"\n className=\"portal-input w-full py-2.5\"\n style={{ paddingLeft: \"44px\" }}\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n required\n disabled={isPending}\n />\n </div>\n </div>\n\n {/* Terms and Conditions */}\n {termsAndConditionsUrl && (\n <div className=\"mb-4\">\n <div className=\"flex items-start gap-3\">\n <input\n type=\"checkbox\"\n id=\"terms-checkbox\"\n checked={termsAccepted}\n onChange={(e) => {\n setTermsAccepted(e.target.checked);\n if (e.target.checked) {\n setShowTermsError(false);\n }\n }}\n className=\"mt-1 min-w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500\"\n required\n disabled={isPending}\n />\n <label htmlFor=\"terms-checkbox\" className=\"text-sm text-gray-600 leading-relaxed\">\n I agree to the{\" \"}\n <a\n href={termsAndConditionsUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-blue-600 hover:underline font-medium\"\n style={{ color: primaryColor }}\n >\n Terms and Conditions\n </a>\n </label>\n </div>\n </div>\n )}\n\n {/* Terms Error */}\n {showTermsError && (\n <div className=\"text-red-600 mb-4 text-center text-sm\">\n Please accept the Terms and Conditions to continue.\n </div>\n )}\n\n {/* API Error */}\n {error && (\n <div className=\"text-red-600 mb-4 text-center text-sm\">\n {error}\n </div>\n )}\n\n {/* Submit Button */}\n <button\n type=\"submit\"\n className=\"w-full flex justify-center items-center bg-blue-600 hover:bg-blue-700 text-white py-2 rounded font-medium transition-colors disabled:opacity-50 disabled:cursor-not-allowed\"\n style={{ background: primaryColor, borderColor: primaryColor }}\n disabled={\n !companyName.trim() ||\n !email.trim() ||\n isPending ||\n (!!termsAndConditionsUrl && !termsAccepted)\n }\n >\n {isPending ? (\n \"Creating account...\"\n ) : (\n <>\n Create account\n <svg className=\"ml-2 h-4 w-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M14 5l7 7m0 0l-7 7m7-7H3\" />\n </svg>\n </>\n )}\n </button>\n\n {/* Login Link */}\n <a\n href=\"/login\"\n className=\"hover:underline font-semibold mt-4 text-center cursor-pointer block\"\n style={{ color: secondaryColor }}\n >\n Already have an account? Sign in\n </a>\n </form>\n )}\n\n {/* Step 2: Verification Code Form */}\n {isCodeSent && (\n <form onSubmit={handleValidateCode} className=\"w-full\">\n <div>\n <div className=\"flex items-center justify-between mb-1\">\n <label htmlFor=\"code\" className=\"block text-sm font-medium text-gray-700\">\n Verification code\n </label>\n <button\n type=\"button\"\n onClick={handleUseDifferentEmail}\n className=\"text-sm text-blue-600 hover:text-blue-700 hover:underline\"\n style={{ color: primaryColor }}\n >\n Use different email\n </button>\n </div>\n <div className=\"mt-1\">\n <input\n id=\"code\"\n name=\"code\"\n type=\"text\"\n value={validationCode}\n onChange={(e) => setValidationCode(e.target.value)}\n className=\"portal-input w-full\"\n placeholder=\"Enter 12-digit code\"\n required\n disabled={isPending}\n />\n </div>\n <p className=\"mt-2 text-sm text-gray-600 mb-4 text-pretty\">\n A verification code has been sent to {email}. Please check your inbox.\n </p>\n </div>\n\n {/* Verification Error */}\n {error && (\n <div className=\"text-red-600 mb-4 text-center text-sm\">\n {error}\n </div>\n )}\n\n {/* Verify Button */}\n <button\n type=\"submit\"\n className=\"w-full bg-blue-600 hover:bg-blue-700 text-white py-2 rounded font-medium transition-colors disabled:opacity-50 disabled:cursor-not-allowed\"\n style={{ background: primaryColor, borderColor: primaryColor }}\n disabled={!validationCode.trim() || isPending}\n >\n {isPending\n ? \"Verifying...\"\n : licenseType === \"community\"\n ? \"Verify code and get license\"\n : \"Verify code and start trial\"}\n </button>\n </form>\n )}\n </div>\n );\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Buffer } from 'buffer';
|
|
2
1
|
import Link from 'next/link';
|
|
2
|
+
import { Buffer } from 'buffer';
|
|
3
3
|
import { cache } from 'react';
|
|
4
4
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
5
5
|
|
|
@@ -7,7 +7,97 @@ import { jsxs, jsx } from 'react/jsx-runtime';
|
|
|
7
7
|
* Enterprise Portal Components
|
|
8
8
|
* This file is generated by tsup. Do not edit manually.
|
|
9
9
|
*/
|
|
10
|
+
var __defProp = Object.defineProperty;
|
|
11
|
+
var __export = (target, all) => {
|
|
12
|
+
for (var name in all)
|
|
13
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
// datadog/tracer.ts
|
|
17
|
+
var tracer_exports = {};
|
|
18
|
+
__export(tracer_exports, {
|
|
19
|
+
default: () => tracer_default
|
|
20
|
+
});
|
|
21
|
+
var tracer_default;
|
|
10
22
|
|
|
23
|
+
// src/utils/constants.ts
|
|
24
|
+
var DEFAULT_PRIMARY_COLOR = "#4f46e5";
|
|
25
|
+
var DEFAULT_SECONDARY_COLOR = "#6366f1";
|
|
26
|
+
|
|
27
|
+
// src/utils/branding.ts
|
|
28
|
+
var normalizeColor = (color) => {
|
|
29
|
+
if (!color || typeof color !== "string") {
|
|
30
|
+
return void 0;
|
|
31
|
+
}
|
|
32
|
+
const trimmed = color.trim();
|
|
33
|
+
if (/^#?[0-9a-fA-F]{3}([0-9a-fA-F]{3})?$/.test(trimmed)) {
|
|
34
|
+
return trimmed.startsWith("#") ? trimmed : `#${trimmed}`;
|
|
35
|
+
}
|
|
36
|
+
console.debug("[portal-components] Invalid color format rejected (only hex supported):", trimmed);
|
|
37
|
+
return void 0;
|
|
38
|
+
};
|
|
39
|
+
var sanitizeUrlForCss = (url) => {
|
|
40
|
+
if (!url || typeof url !== "string") {
|
|
41
|
+
return void 0;
|
|
42
|
+
}
|
|
43
|
+
const trimmed = url.trim();
|
|
44
|
+
try {
|
|
45
|
+
const urlObj = new URL(trimmed);
|
|
46
|
+
if (!["http:", "https:", "data:"].includes(urlObj.protocol)) {
|
|
47
|
+
console.debug("[portal-components] Invalid URL protocol for background image:", urlObj.protocol);
|
|
48
|
+
return void 0;
|
|
49
|
+
}
|
|
50
|
+
} catch {
|
|
51
|
+
console.debug("[portal-components] Invalid URL format for background image:", trimmed);
|
|
52
|
+
return void 0;
|
|
53
|
+
}
|
|
54
|
+
const escaped = trimmed.replace(/\\/g, "\\\\").replace(/\)/g, "\\)").replace(/"/g, '\\"').replace(/'/g, "\\'").replace(/[\x00-\x1F\x7F]/g, "");
|
|
55
|
+
return escaped;
|
|
56
|
+
};
|
|
57
|
+
var decodeBranding = ({ brandingData }) => {
|
|
58
|
+
if (!brandingData || typeof brandingData !== "string") {
|
|
59
|
+
return {
|
|
60
|
+
primaryColor: DEFAULT_PRIMARY_COLOR,
|
|
61
|
+
secondaryColor: DEFAULT_SECONDARY_COLOR
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
const decoded = Buffer.from(brandingData, "base64").toString("utf-8");
|
|
66
|
+
const parsed = JSON.parse(decoded);
|
|
67
|
+
const logo = typeof parsed.logo === "string" ? parsed.logo : void 0;
|
|
68
|
+
const titleRaw = typeof parsed.title === "string" ? parsed.title.trim() : "";
|
|
69
|
+
const title = titleRaw ? titleRaw : void 0;
|
|
70
|
+
const favicon = typeof parsed.favicon === "string" ? parsed.favicon : void 0;
|
|
71
|
+
const primaryColorRaw = parsed.primaryColor ?? parsed.primary_color;
|
|
72
|
+
const secondaryColorRaw = parsed.secondaryColor ?? parsed.secondary_color;
|
|
73
|
+
const primaryColor = normalizeColor(primaryColorRaw);
|
|
74
|
+
const secondaryColor = normalizeColor(secondaryColorRaw);
|
|
75
|
+
const supportPortalLink = typeof parsed.supportPortalLink === "string" ? parsed.supportPortalLink : void 0;
|
|
76
|
+
const backgroundRaw = parsed.background;
|
|
77
|
+
const background = backgroundRaw === "minimal" || backgroundRaw === "custom" || backgroundRaw === "image" ? backgroundRaw : void 0;
|
|
78
|
+
const backgroundImage = sanitizeUrlForCss(parsed.backgroundImage);
|
|
79
|
+
const backgroundGradientStart = normalizeColor(parsed.customColor1);
|
|
80
|
+
const backgroundGradientEnd = normalizeColor(parsed.customColor2);
|
|
81
|
+
return {
|
|
82
|
+
logo,
|
|
83
|
+
title,
|
|
84
|
+
favicon,
|
|
85
|
+
primaryColor: primaryColor || DEFAULT_PRIMARY_COLOR,
|
|
86
|
+
secondaryColor: secondaryColor || DEFAULT_SECONDARY_COLOR,
|
|
87
|
+
supportPortalLink,
|
|
88
|
+
background,
|
|
89
|
+
backgroundImage,
|
|
90
|
+
backgroundGradientStart,
|
|
91
|
+
backgroundGradientEnd
|
|
92
|
+
};
|
|
93
|
+
} catch (error) {
|
|
94
|
+
console.debug("[portal-components] unable to parse branding JSON", error);
|
|
95
|
+
return {
|
|
96
|
+
primaryColor: DEFAULT_PRIMARY_COLOR,
|
|
97
|
+
secondaryColor: DEFAULT_SECONDARY_COLOR
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
};
|
|
11
101
|
|
|
12
102
|
// src/actions/index.ts
|
|
13
103
|
var getApiOrigin = () => {
|
|
@@ -40,11 +130,15 @@ var fetchCustomBrandingImpl = async () => {
|
|
|
40
130
|
const payload = await response.json();
|
|
41
131
|
const brandingObject = {
|
|
42
132
|
logo: payload.logoUrl,
|
|
43
|
-
title: payload.
|
|
44
|
-
|
|
45
|
-
|
|
133
|
+
title: payload.title,
|
|
134
|
+
primaryColor: payload.primaryColor,
|
|
135
|
+
secondaryColor: payload.secondaryColor,
|
|
46
136
|
favicon: payload.faviconUrl,
|
|
47
|
-
supportPortalLink: payload.supportPortalLink || ""
|
|
137
|
+
supportPortalLink: payload.supportPortalLink || "",
|
|
138
|
+
background: payload.background,
|
|
139
|
+
backgroundImage: payload.backgroundImage,
|
|
140
|
+
customColor1: payload.customColor1,
|
|
141
|
+
customColor2: payload.customColor2
|
|
48
142
|
};
|
|
49
143
|
const brandingData = Buffer.from(JSON.stringify(brandingObject)).toString("base64");
|
|
50
144
|
return {
|
|
@@ -239,57 +333,49 @@ var TopNav = async ({
|
|
|
239
333
|
currentCustomerId,
|
|
240
334
|
onChangeTeam,
|
|
241
335
|
userMenuChildren,
|
|
242
|
-
logoutButton
|
|
336
|
+
logoutButton,
|
|
337
|
+
branding: brandingProp
|
|
243
338
|
}) => {
|
|
244
339
|
const displayLabel = userMenuLabel || (customerName ? `Team: ${customerName}` : "Team: Example");
|
|
245
340
|
let logo;
|
|
246
341
|
let brandTitle;
|
|
247
|
-
let
|
|
248
|
-
let
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
if (
|
|
255
|
-
|
|
342
|
+
let primaryColor;
|
|
343
|
+
let secondaryColor;
|
|
344
|
+
let background;
|
|
345
|
+
let backgroundImageUrl;
|
|
346
|
+
let backgroundGradientStart;
|
|
347
|
+
let backgroundGradientEnd;
|
|
348
|
+
if (brandingProp) {
|
|
349
|
+
if (brandingProp.logo && typeof brandingProp.logo === "string") {
|
|
350
|
+
logo = brandingProp.logo;
|
|
256
351
|
}
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
if (branding.brandingData) {
|
|
262
|
-
const decoded = Buffer.from(branding.brandingData, "base64").toString(
|
|
263
|
-
"utf-8"
|
|
264
|
-
);
|
|
265
|
-
try {
|
|
266
|
-
const parsed = JSON.parse(decoded);
|
|
267
|
-
if (parsed?.logo && typeof parsed.logo === "string") {
|
|
268
|
-
logo = parsed.logo;
|
|
269
|
-
}
|
|
270
|
-
if (parsed?.title && typeof parsed.title === "string") {
|
|
271
|
-
const normalizedTitle = parsed.title.trim();
|
|
272
|
-
if (normalizedTitle) {
|
|
273
|
-
brandTitle = normalizedTitle;
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
if (parsed?.customColor1 && typeof parsed.customColor1 === "string") {
|
|
277
|
-
customColor1 = normalizeColor(parsed.customColor1);
|
|
278
|
-
}
|
|
279
|
-
if (parsed?.customColor2 && typeof parsed.customColor2 === "string") {
|
|
280
|
-
customColor2 = normalizeColor(parsed.customColor2);
|
|
281
|
-
}
|
|
282
|
-
} catch (error) {
|
|
283
|
-
console.debug(
|
|
284
|
-
"[portal-components] unable to parse branding JSON",
|
|
285
|
-
error
|
|
286
|
-
);
|
|
352
|
+
if (brandingProp.title && typeof brandingProp.title === "string") {
|
|
353
|
+
const normalizedTitle = brandingProp.title.trim();
|
|
354
|
+
if (normalizedTitle) {
|
|
355
|
+
brandTitle = normalizedTitle;
|
|
287
356
|
}
|
|
288
|
-
} else {
|
|
289
|
-
console.debug("[portal-components] branding", branding);
|
|
290
357
|
}
|
|
291
|
-
|
|
292
|
-
|
|
358
|
+
primaryColor = normalizeColor(brandingProp.primaryColor);
|
|
359
|
+
secondaryColor = normalizeColor(brandingProp.secondaryColor);
|
|
360
|
+
background = brandingProp.background;
|
|
361
|
+
backgroundImageUrl = brandingProp.backgroundImage;
|
|
362
|
+
backgroundGradientStart = normalizeColor(brandingProp.backgroundGradientStart);
|
|
363
|
+
backgroundGradientEnd = normalizeColor(brandingProp.backgroundGradientEnd);
|
|
364
|
+
} else {
|
|
365
|
+
try {
|
|
366
|
+
const brandingResponse = await fetchCustomBranding();
|
|
367
|
+
const branding = decodeBranding({ brandingData: brandingResponse.brandingData });
|
|
368
|
+
logo = branding.logo;
|
|
369
|
+
brandTitle = branding.title;
|
|
370
|
+
primaryColor = branding.primaryColor;
|
|
371
|
+
secondaryColor = branding.secondaryColor;
|
|
372
|
+
background = branding.background;
|
|
373
|
+
backgroundImageUrl = branding.backgroundImage;
|
|
374
|
+
backgroundGradientStart = branding.backgroundGradientStart;
|
|
375
|
+
backgroundGradientEnd = branding.backgroundGradientEnd;
|
|
376
|
+
} catch (error) {
|
|
377
|
+
console.debug("[portal-components] branding fetch failed", error);
|
|
378
|
+
}
|
|
293
379
|
}
|
|
294
380
|
const baseLinks = links ?? defaultTopNavLinks;
|
|
295
381
|
const hiddenSet = hiddenLabels ? new Set(hiddenLabels) : null;
|
|
@@ -300,20 +386,32 @@ var TopNav = async ({
|
|
|
300
386
|
resolvedLinks = [...resolvedLinks, ...additionalLinks];
|
|
301
387
|
}
|
|
302
388
|
resolvedLinks = orderLinks(resolvedLinks, order);
|
|
303
|
-
const
|
|
304
|
-
|
|
389
|
+
const getHeaderBackgroundStyle = () => {
|
|
390
|
+
if (background === "image" && backgroundImageUrl) {
|
|
391
|
+
return {
|
|
392
|
+
background: `url(${backgroundImageUrl})`,
|
|
393
|
+
backgroundImage: `linear-gradient(to top, rgba(255, 255, 255, 0.3) 30%, rgba(255, 255, 255, 0)), url(${backgroundImageUrl})`,
|
|
394
|
+
backgroundSize: "cover",
|
|
395
|
+
backgroundPosition: "center",
|
|
396
|
+
backgroundRepeat: "no-repeat"
|
|
397
|
+
};
|
|
398
|
+
}
|
|
399
|
+
const gradientStart = background === "custom" && backgroundGradientStart ? backgroundGradientStart : primaryColor;
|
|
400
|
+
const gradientEnd = background === "custom" && backgroundGradientEnd ? backgroundGradientEnd : secondaryColor;
|
|
401
|
+
return {
|
|
402
|
+
backgroundImage: `linear-gradient(to top, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0) 33%), linear-gradient(${gradientStart}, ${gradientEnd})`,
|
|
403
|
+
backgroundRepeat: "no-repeat",
|
|
404
|
+
backgroundSize: "100% 100%"
|
|
405
|
+
};
|
|
406
|
+
};
|
|
305
407
|
return /* @__PURE__ */ jsx(
|
|
306
408
|
"div",
|
|
307
409
|
{
|
|
308
410
|
className: "relative flex h-[280px] w-full items-start justify-center",
|
|
309
|
-
style:
|
|
310
|
-
|
|
311
|
-
backgroundRepeat: "no-repeat",
|
|
312
|
-
backgroundSize: "100% 100%"
|
|
313
|
-
},
|
|
314
|
-
children: /* @__PURE__ */ jsx("div", { className: "mx-auto mt-[30px] w-full max-w-[1248px] px-6", children: /* @__PURE__ */ jsxs("div", { className: "flex h-[135px] flex-col justify-between space-y-4 rounded bg-[#ffffffe6] px-6 pt-6 pb-4 shadow-[0_10px_60px_rgba(16,16,16,0.35)]", children: [
|
|
411
|
+
style: getHeaderBackgroundStyle(),
|
|
412
|
+
children: /* @__PURE__ */ jsx("div", { className: "mx-auto mt-[30px] w-full max-w-[1248px] px-6", children: /* @__PURE__ */ jsxs("div", { className: "flex h-[142px] flex-col justify-between space-y-4 rounded bg-[#ffffffe6] px-6 pt-6 pb-4 shadow-[0_10px_60px_rgba(16,16,16,0.35)]", children: [
|
|
315
413
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
|
|
316
|
-
|
|
414
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
|
|
317
415
|
logo ? (
|
|
318
416
|
// eslint-disable-next-line @next/next/no-img-element
|
|
319
417
|
/* @__PURE__ */ jsx(
|
|
@@ -328,9 +426,24 @@ var TopNav = async ({
|
|
|
328
426
|
}
|
|
329
427
|
}
|
|
330
428
|
)
|
|
331
|
-
) :
|
|
332
|
-
|
|
333
|
-
|
|
429
|
+
) : /* @__PURE__ */ jsxs(
|
|
430
|
+
"svg",
|
|
431
|
+
{
|
|
432
|
+
className: "h-8 w-8 text-gray-400",
|
|
433
|
+
viewBox: "0 0 24 24",
|
|
434
|
+
fill: "none",
|
|
435
|
+
stroke: "currentColor",
|
|
436
|
+
strokeWidth: "1.5",
|
|
437
|
+
"aria-hidden": "true",
|
|
438
|
+
children: [
|
|
439
|
+
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10" }),
|
|
440
|
+
/* @__PURE__ */ jsx("ellipse", { cx: "12", cy: "12", rx: "4", ry: "10" }),
|
|
441
|
+
/* @__PURE__ */ jsx("path", { d: "M2 12h20" })
|
|
442
|
+
]
|
|
443
|
+
}
|
|
444
|
+
),
|
|
445
|
+
/* @__PURE__ */ jsx("span", { className: "text-xl font-bold text-gray-900", children: brandTitle || "Enterprise Portal" })
|
|
446
|
+
] }),
|
|
334
447
|
/* @__PURE__ */ jsxs("details", { className: "group relative", children: [
|
|
335
448
|
/* @__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: [
|
|
336
449
|
/* @__PURE__ */ jsxs(
|
|
@@ -392,7 +505,7 @@ var TopNav = async ({
|
|
|
392
505
|
] })
|
|
393
506
|
] })
|
|
394
507
|
] }),
|
|
395
|
-
/* @__PURE__ */ jsx("div", { className: "mt-3 flex flex-wrap gap-3
|
|
508
|
+
/* @__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 }) => {
|
|
396
509
|
const isActive = activeLabel === label;
|
|
397
510
|
const className = `flex items-center gap-2 px-4 py-1 transition text-gray-500 ${isActive ? "underline underline-offset-8 decoration-2" : ""}`;
|
|
398
511
|
if (href) {
|