@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.
Files changed (244) hide show
  1. package/components/metadata/registry.json +2 -2
  2. package/components/metadata/registry.md +2 -2
  3. package/dist/actions/change-team.js +66 -7
  4. package/dist/actions/change-team.js.map +1 -1
  5. package/dist/actions/index.d.mts +3 -1
  6. package/dist/actions/index.d.ts +3 -1
  7. package/dist/actions/index.js +182 -465
  8. package/dist/actions/index.js.map +1 -1
  9. package/dist/actions/install-actions.d.mts +3 -1
  10. package/dist/actions/install-actions.d.ts +3 -1
  11. package/dist/actions/install-actions.js +58 -5
  12. package/dist/actions/install-actions.js.map +1 -1
  13. package/dist/actions/service-account.d.mts +3 -1
  14. package/dist/actions/service-account.d.ts +3 -1
  15. package/dist/actions/service-account.js +58 -5
  16. package/dist/actions/service-account.js.map +1 -1
  17. package/dist/actions/support-bundles.d.mts +3 -1
  18. package/dist/actions/support-bundles.d.ts +3 -1
  19. package/dist/actions/support-bundles.js +58 -5
  20. package/dist/actions/support-bundles.js.map +1 -1
  21. package/dist/actions/team-settings.d.mts +3 -1
  22. package/dist/actions/team-settings.d.ts +3 -1
  23. package/dist/actions/team-settings.js +91 -27
  24. package/dist/actions/team-settings.js.map +1 -1
  25. package/dist/actions/trial-signup.d.mts +24 -0
  26. package/dist/actions/trial-signup.d.ts +24 -0
  27. package/dist/actions/trial-signup.js +482 -0
  28. package/dist/actions/trial-signup.js.map +1 -0
  29. package/dist/actions/user-settings.d.mts +3 -1
  30. package/dist/actions/user-settings.d.ts +3 -1
  31. package/dist/actions/user-settings.js +58 -5
  32. package/dist/actions/user-settings.js.map +1 -1
  33. package/dist/airgap-instances.d.mts +3 -1
  34. package/dist/airgap-instances.d.ts +3 -1
  35. package/dist/airgap-instances.js +41 -112
  36. package/dist/airgap-instances.js.map +1 -1
  37. package/dist/branding-BsMSywts.d.mts +36 -0
  38. package/dist/branding-BsMSywts.d.ts +36 -0
  39. package/dist/error-page.js +10 -2
  40. package/dist/error-page.js.map +1 -1
  41. package/dist/error.js +10 -2
  42. package/dist/error.js.map +1 -1
  43. package/dist/esm/actions/change-team.js +66 -7
  44. package/dist/esm/actions/change-team.js.map +1 -1
  45. package/dist/esm/actions/index.js +181 -462
  46. package/dist/esm/actions/index.js.map +1 -1
  47. package/dist/esm/actions/install-actions.js +58 -5
  48. package/dist/esm/actions/install-actions.js.map +1 -1
  49. package/dist/esm/actions/service-account.js +58 -5
  50. package/dist/esm/actions/service-account.js.map +1 -1
  51. package/dist/esm/actions/support-bundles.js +58 -5
  52. package/dist/esm/actions/support-bundles.js.map +1 -1
  53. package/dist/esm/actions/team-settings.js +91 -27
  54. package/dist/esm/actions/team-settings.js.map +1 -1
  55. package/dist/esm/actions/trial-signup.js +478 -0
  56. package/dist/esm/actions/trial-signup.js.map +1 -0
  57. package/dist/esm/actions/user-settings.js +58 -5
  58. package/dist/esm/actions/user-settings.js.map +1 -1
  59. package/dist/esm/airgap-instances.js +40 -112
  60. package/dist/esm/airgap-instances.js.map +1 -1
  61. package/dist/esm/error-page.js +10 -2
  62. package/dist/esm/error-page.js.map +1 -1
  63. package/dist/esm/error.js +10 -2
  64. package/dist/esm/error.js.map +1 -1
  65. package/dist/esm/helm-install-wizard.js +118 -79
  66. package/dist/esm/helm-install-wizard.js.map +1 -1
  67. package/dist/esm/index.js +706 -438
  68. package/dist/esm/index.js.map +1 -1
  69. package/dist/esm/install-actions.js +40 -5
  70. package/dist/esm/install-actions.js.map +1 -1
  71. package/dist/esm/install-card.js +9 -6
  72. package/dist/esm/install-card.js.map +1 -1
  73. package/dist/esm/install-targets.js +9 -2
  74. package/dist/esm/install-targets.js.map +1 -1
  75. package/dist/esm/instance-card.js +39 -111
  76. package/dist/esm/instance-card.js.map +1 -1
  77. package/dist/esm/join-team.js +9 -3
  78. package/dist/esm/join-team.js.map +1 -1
  79. package/dist/esm/license-card.js +24 -22
  80. package/dist/esm/license-card.js.map +1 -1
  81. package/dist/esm/license-details.js +128 -334
  82. package/dist/esm/license-details.js.map +1 -1
  83. package/dist/esm/linux-install-wizard.js +95 -41
  84. package/dist/esm/linux-install-wizard.js.map +1 -1
  85. package/dist/esm/login.js +20 -4
  86. package/dist/esm/login.js.map +1 -1
  87. package/dist/esm/middleware.js +33 -0
  88. package/dist/esm/middleware.js.map +1 -0
  89. package/dist/esm/online-instance-list.js +40 -112
  90. package/dist/esm/online-instance-list.js.map +1 -1
  91. package/dist/esm/release-history-panel.js +27 -14
  92. package/dist/esm/release-history-panel.js.map +1 -1
  93. package/dist/esm/saml-callback-client.js +82 -0
  94. package/dist/esm/saml-callback-client.js.map +1 -0
  95. package/dist/esm/saml-handlers.js +138 -0
  96. package/dist/esm/saml-handlers.js.map +1 -0
  97. package/dist/esm/security-card.js +53 -38
  98. package/dist/esm/security-card.js.map +1 -1
  99. package/dist/esm/service-accounts-tab.js +800 -0
  100. package/dist/esm/service-accounts-tab.js.map +1 -0
  101. package/dist/esm/support-bundle-collection-card.js +48 -24
  102. package/dist/esm/support-bundle-collection-card.js.map +1 -1
  103. package/dist/esm/support-bundles-card.js +10 -5
  104. package/dist/esm/support-bundles-card.js.map +1 -1
  105. package/dist/esm/support-card.js +37 -5
  106. package/dist/esm/support-card.js.map +1 -1
  107. package/dist/esm/team-selection.js +5 -1
  108. package/dist/esm/team-selection.js.map +1 -1
  109. package/dist/esm/team-settings-card.js +5 -2
  110. package/dist/esm/team-settings-card.js.map +1 -1
  111. package/dist/esm/team-settings.js +7 -2
  112. package/dist/esm/team-settings.js.map +1 -1
  113. package/dist/esm/top-nav-user-menu.js +5 -1
  114. package/dist/esm/top-nav-user-menu.js.map +1 -1
  115. package/dist/esm/top-nav.js +175 -62
  116. package/dist/esm/top-nav.js.map +1 -1
  117. package/dist/esm/trial-signup.js +256 -0
  118. package/dist/esm/trial-signup.js.map +1 -0
  119. package/dist/esm/update-layout.js +175 -62
  120. package/dist/esm/update-layout.js.map +1 -1
  121. package/dist/esm/updates-card.js +15 -4
  122. package/dist/esm/updates-card.js.map +1 -1
  123. package/dist/esm/upload-support-bundle-modal.js +9 -4
  124. package/dist/esm/upload-support-bundle-modal.js.map +1 -1
  125. package/dist/esm/user-settings-card.js +5 -2
  126. package/dist/esm/user-settings-card.js.map +1 -1
  127. package/dist/esm/user-settings.js +12 -6
  128. package/dist/esm/user-settings.js.map +1 -1
  129. package/dist/esm/utils/index.js +204 -13
  130. package/dist/esm/utils/index.js.map +1 -1
  131. package/dist/fetch-license-iTyF7_GY.d.mts +81 -0
  132. package/dist/fetch-license-iTyF7_GY.d.ts +81 -0
  133. package/dist/helm-install-wizard.d.mts +11 -3
  134. package/dist/helm-install-wizard.d.ts +11 -3
  135. package/dist/helm-install-wizard.js +118 -79
  136. package/dist/helm-install-wizard.js.map +1 -1
  137. package/dist/{index-BAiVrSSR.d.mts → index-DyzJ0yKD.d.mts} +48 -50
  138. package/dist/{index-DWt-N5od.d.ts → index-sMbq94M7.d.ts} +48 -50
  139. package/dist/index.d.mts +8 -2
  140. package/dist/index.d.ts +8 -2
  141. package/dist/index.js +726 -438
  142. package/dist/index.js.map +1 -1
  143. package/dist/install-actions.d.mts +4 -2
  144. package/dist/install-actions.d.ts +4 -2
  145. package/dist/install-actions.js +40 -5
  146. package/dist/install-actions.js.map +1 -1
  147. package/dist/install-card.d.mts +2 -3
  148. package/dist/install-card.d.ts +2 -3
  149. package/dist/install-card.js +9 -6
  150. package/dist/install-card.js.map +1 -1
  151. package/dist/install-targets.js +9 -2
  152. package/dist/install-targets.js.map +1 -1
  153. package/dist/instance-card.d.mts +3 -1
  154. package/dist/instance-card.d.ts +3 -1
  155. package/dist/instance-card.js +40 -111
  156. package/dist/instance-card.js.map +1 -1
  157. package/dist/join-team.js +9 -3
  158. package/dist/join-team.js.map +1 -1
  159. package/dist/license-card.d.mts +2 -3
  160. package/dist/license-card.d.ts +2 -3
  161. package/dist/license-card.js +24 -22
  162. package/dist/license-card.js.map +1 -1
  163. package/dist/license-details.js +128 -334
  164. package/dist/license-details.js.map +1 -1
  165. package/dist/linux-install-wizard.d.mts +9 -3
  166. package/dist/linux-install-wizard.d.ts +9 -3
  167. package/dist/linux-install-wizard.js +95 -41
  168. package/dist/linux-install-wizard.js.map +1 -1
  169. package/dist/login.d.mts +4 -0
  170. package/dist/login.d.ts +4 -0
  171. package/dist/login.js +20 -4
  172. package/dist/login.js.map +1 -1
  173. package/dist/middleware.d.mts +13 -0
  174. package/dist/middleware.d.ts +13 -0
  175. package/dist/middleware.js +35 -0
  176. package/dist/middleware.js.map +1 -0
  177. package/dist/online-instance-list.d.mts +3 -1
  178. package/dist/online-instance-list.d.ts +3 -1
  179. package/dist/online-instance-list.js +41 -112
  180. package/dist/online-instance-list.js.map +1 -1
  181. package/dist/pending-installations.d.mts +3 -1
  182. package/dist/pending-installations.d.ts +3 -1
  183. package/dist/release-history-panel.js +27 -14
  184. package/dist/release-history-panel.js.map +1 -1
  185. package/dist/saml-callback-client.d.mts +36 -0
  186. package/dist/saml-callback-client.d.ts +36 -0
  187. package/dist/saml-callback-client.js +88 -0
  188. package/dist/saml-callback-client.js.map +1 -0
  189. package/dist/saml-handlers.d.mts +50 -0
  190. package/dist/saml-handlers.d.ts +50 -0
  191. package/dist/saml-handlers.js +141 -0
  192. package/dist/saml-handlers.js.map +1 -0
  193. package/dist/security-card.d.mts +3 -1
  194. package/dist/security-card.d.ts +3 -1
  195. package/dist/security-card.js +53 -38
  196. package/dist/security-card.js.map +1 -1
  197. package/dist/service-accounts-tab.d.mts +51 -0
  198. package/dist/service-accounts-tab.d.ts +51 -0
  199. package/dist/service-accounts-tab.js +802 -0
  200. package/dist/service-accounts-tab.js.map +1 -0
  201. package/dist/styles.css +375 -127
  202. package/dist/support-bundle-collection-card.d.mts +1 -1
  203. package/dist/support-bundle-collection-card.d.ts +1 -1
  204. package/dist/support-bundle-collection-card.js +47 -23
  205. package/dist/support-bundle-collection-card.js.map +1 -1
  206. package/dist/support-bundles-card.d.mts +4 -2
  207. package/dist/support-bundles-card.d.ts +4 -2
  208. package/dist/support-bundles-card.js +10 -5
  209. package/dist/support-bundles-card.js.map +1 -1
  210. package/dist/support-card.js +37 -5
  211. package/dist/support-card.js.map +1 -1
  212. package/dist/team-selection.js +5 -1
  213. package/dist/team-selection.js.map +1 -1
  214. package/dist/team-settings-card.js +5 -2
  215. package/dist/team-settings-card.js.map +1 -1
  216. package/dist/team-settings.js +7 -2
  217. package/dist/team-settings.js.map +1 -1
  218. package/dist/{top-nav-IRIn66wS.d.ts → top-nav-BUQAGoG1.d.mts} +14 -2
  219. package/dist/{top-nav-IRIn66wS.d.mts → top-nav-CEqw0KpO.d.ts} +14 -2
  220. package/dist/top-nav-user-menu.js +5 -1
  221. package/dist/top-nav-user-menu.js.map +1 -1
  222. package/dist/top-nav.d.mts +2 -1
  223. package/dist/top-nav.d.ts +2 -1
  224. package/dist/top-nav.js +175 -62
  225. package/dist/top-nav.js.map +1 -1
  226. package/dist/trial-signup.d.mts +31 -0
  227. package/dist/trial-signup.d.ts +31 -0
  228. package/dist/trial-signup.js +258 -0
  229. package/dist/trial-signup.js.map +1 -0
  230. package/dist/update-layout.js +175 -62
  231. package/dist/update-layout.js.map +1 -1
  232. package/dist/updates-card.js +15 -4
  233. package/dist/updates-card.js.map +1 -1
  234. package/dist/upload-support-bundle-modal.js +9 -4
  235. package/dist/upload-support-bundle-modal.js.map +1 -1
  236. package/dist/user-settings-card.js +5 -2
  237. package/dist/user-settings-card.js.map +1 -1
  238. package/dist/user-settings.js +12 -6
  239. package/dist/user-settings.js.map +1 -1
  240. package/dist/utils/index.d.mts +74 -16
  241. package/dist/utils/index.d.ts +74 -16
  242. package/dist/utils/index.js +215 -12
  243. package/dist/utils/index.js.map +1 -1
  244. package/package.json +37 -2
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var buffer = require('buffer');
4
3
  var Link = require('next/link');
4
+ var buffer = require('buffer');
5
5
  var react = require('react');
6
6
  var jsxRuntime = require('react/jsx-runtime');
7
7
 
@@ -13,7 +13,97 @@ var Link__default = /*#__PURE__*/_interopDefault(Link);
13
13
  * Enterprise Portal Components
14
14
  * This file is generated by tsup. Do not edit manually.
15
15
  */
16
+ var __defProp = Object.defineProperty;
17
+ var __export = (target, all) => {
18
+ for (var name in all)
19
+ __defProp(target, name, { get: all[name], enumerable: true });
20
+ };
21
+
22
+ // datadog/tracer.ts
23
+ var tracer_exports = {};
24
+ __export(tracer_exports, {
25
+ default: () => tracer_default
26
+ });
27
+ var tracer_default;
16
28
 
29
+ // src/utils/constants.ts
30
+ var DEFAULT_PRIMARY_COLOR = "#4f46e5";
31
+ var DEFAULT_SECONDARY_COLOR = "#6366f1";
32
+
33
+ // src/utils/branding.ts
34
+ var normalizeColor = (color) => {
35
+ if (!color || typeof color !== "string") {
36
+ return void 0;
37
+ }
38
+ const trimmed = color.trim();
39
+ if (/^#?[0-9a-fA-F]{3}([0-9a-fA-F]{3})?$/.test(trimmed)) {
40
+ return trimmed.startsWith("#") ? trimmed : `#${trimmed}`;
41
+ }
42
+ console.debug("[portal-components] Invalid color format rejected (only hex supported):", trimmed);
43
+ return void 0;
44
+ };
45
+ var sanitizeUrlForCss = (url) => {
46
+ if (!url || typeof url !== "string") {
47
+ return void 0;
48
+ }
49
+ const trimmed = url.trim();
50
+ try {
51
+ const urlObj = new URL(trimmed);
52
+ if (!["http:", "https:", "data:"].includes(urlObj.protocol)) {
53
+ console.debug("[portal-components] Invalid URL protocol for background image:", urlObj.protocol);
54
+ return void 0;
55
+ }
56
+ } catch {
57
+ console.debug("[portal-components] Invalid URL format for background image:", trimmed);
58
+ return void 0;
59
+ }
60
+ const escaped = trimmed.replace(/\\/g, "\\\\").replace(/\)/g, "\\)").replace(/"/g, '\\"').replace(/'/g, "\\'").replace(/[\x00-\x1F\x7F]/g, "");
61
+ return escaped;
62
+ };
63
+ var decodeBranding = ({ brandingData }) => {
64
+ if (!brandingData || typeof brandingData !== "string") {
65
+ return {
66
+ primaryColor: DEFAULT_PRIMARY_COLOR,
67
+ secondaryColor: DEFAULT_SECONDARY_COLOR
68
+ };
69
+ }
70
+ try {
71
+ const decoded = buffer.Buffer.from(brandingData, "base64").toString("utf-8");
72
+ const parsed = JSON.parse(decoded);
73
+ const logo = typeof parsed.logo === "string" ? parsed.logo : void 0;
74
+ const titleRaw = typeof parsed.title === "string" ? parsed.title.trim() : "";
75
+ const title = titleRaw ? titleRaw : void 0;
76
+ const favicon = typeof parsed.favicon === "string" ? parsed.favicon : void 0;
77
+ const primaryColorRaw = parsed.primaryColor ?? parsed.primary_color;
78
+ const secondaryColorRaw = parsed.secondaryColor ?? parsed.secondary_color;
79
+ const primaryColor = normalizeColor(primaryColorRaw);
80
+ const secondaryColor = normalizeColor(secondaryColorRaw);
81
+ const supportPortalLink = typeof parsed.supportPortalLink === "string" ? parsed.supportPortalLink : void 0;
82
+ const backgroundRaw = parsed.background;
83
+ const background = backgroundRaw === "minimal" || backgroundRaw === "custom" || backgroundRaw === "image" ? backgroundRaw : void 0;
84
+ const backgroundImage = sanitizeUrlForCss(parsed.backgroundImage);
85
+ const backgroundGradientStart = normalizeColor(parsed.customColor1);
86
+ const backgroundGradientEnd = normalizeColor(parsed.customColor2);
87
+ return {
88
+ logo,
89
+ title,
90
+ favicon,
91
+ primaryColor: primaryColor || DEFAULT_PRIMARY_COLOR,
92
+ secondaryColor: secondaryColor || DEFAULT_SECONDARY_COLOR,
93
+ supportPortalLink,
94
+ background,
95
+ backgroundImage,
96
+ backgroundGradientStart,
97
+ backgroundGradientEnd
98
+ };
99
+ } catch (error) {
100
+ console.debug("[portal-components] unable to parse branding JSON", error);
101
+ return {
102
+ primaryColor: DEFAULT_PRIMARY_COLOR,
103
+ secondaryColor: DEFAULT_SECONDARY_COLOR
104
+ };
105
+ }
106
+ };
17
107
 
18
108
  // src/actions/index.ts
19
109
  var getApiOrigin = () => {
@@ -46,11 +136,15 @@ var fetchCustomBrandingImpl = async () => {
46
136
  const payload = await response.json();
47
137
  const brandingObject = {
48
138
  logo: payload.logoUrl,
49
- title: payload.appName,
50
- customColor1: payload.primaryColor,
51
- customColor2: payload.secondaryColor,
139
+ title: payload.title,
140
+ primaryColor: payload.primaryColor,
141
+ secondaryColor: payload.secondaryColor,
52
142
  favicon: payload.faviconUrl,
53
- supportPortalLink: payload.supportPortalLink || ""
143
+ supportPortalLink: payload.supportPortalLink || "",
144
+ background: payload.background,
145
+ backgroundImage: payload.backgroundImage,
146
+ customColor1: payload.customColor1,
147
+ customColor2: payload.customColor2
54
148
  };
55
149
  const brandingData = buffer.Buffer.from(JSON.stringify(brandingObject)).toString("base64");
56
150
  return {
@@ -245,57 +339,49 @@ var TopNav = async ({
245
339
  currentCustomerId,
246
340
  onChangeTeam,
247
341
  userMenuChildren,
248
- logoutButton
342
+ logoutButton,
343
+ branding: brandingProp
249
344
  }) => {
250
345
  const displayLabel = userMenuLabel || (customerName ? `Team: ${customerName}` : "Team: Example");
251
346
  let logo;
252
347
  let brandTitle;
253
- let customColor1;
254
- let customColor2;
255
- const normalizeColor = (color) => {
256
- if (!color || typeof color !== "string") {
257
- return void 0;
258
- }
259
- const trimmed = color.trim();
260
- if (/^#?[0-9a-fA-F]{3}([0-9a-fA-F]{3})?$/.test(trimmed)) {
261
- return trimmed.startsWith("#") ? trimmed : `#${trimmed}`;
348
+ let primaryColor;
349
+ let secondaryColor;
350
+ let background;
351
+ let backgroundImageUrl;
352
+ let backgroundGradientStart;
353
+ let backgroundGradientEnd;
354
+ if (brandingProp) {
355
+ if (brandingProp.logo && typeof brandingProp.logo === "string") {
356
+ logo = brandingProp.logo;
262
357
  }
263
- return trimmed;
264
- };
265
- try {
266
- const branding = await fetchCustomBranding();
267
- if (branding.brandingData) {
268
- const decoded = buffer.Buffer.from(branding.brandingData, "base64").toString(
269
- "utf-8"
270
- );
271
- try {
272
- const parsed = JSON.parse(decoded);
273
- if (parsed?.logo && typeof parsed.logo === "string") {
274
- logo = parsed.logo;
275
- }
276
- if (parsed?.title && typeof parsed.title === "string") {
277
- const normalizedTitle = parsed.title.trim();
278
- if (normalizedTitle) {
279
- brandTitle = normalizedTitle;
280
- }
281
- }
282
- if (parsed?.customColor1 && typeof parsed.customColor1 === "string") {
283
- customColor1 = normalizeColor(parsed.customColor1);
284
- }
285
- if (parsed?.customColor2 && typeof parsed.customColor2 === "string") {
286
- customColor2 = normalizeColor(parsed.customColor2);
287
- }
288
- } catch (error) {
289
- console.debug(
290
- "[portal-components] unable to parse branding JSON",
291
- error
292
- );
358
+ if (brandingProp.title && typeof brandingProp.title === "string") {
359
+ const normalizedTitle = brandingProp.title.trim();
360
+ if (normalizedTitle) {
361
+ brandTitle = normalizedTitle;
293
362
  }
294
- } else {
295
- console.debug("[portal-components] branding", branding);
296
363
  }
297
- } catch (error) {
298
- console.debug("[portal-components] branding fetch failed", error);
364
+ primaryColor = normalizeColor(brandingProp.primaryColor);
365
+ secondaryColor = normalizeColor(brandingProp.secondaryColor);
366
+ background = brandingProp.background;
367
+ backgroundImageUrl = brandingProp.backgroundImage;
368
+ backgroundGradientStart = normalizeColor(brandingProp.backgroundGradientStart);
369
+ backgroundGradientEnd = normalizeColor(brandingProp.backgroundGradientEnd);
370
+ } else {
371
+ try {
372
+ const brandingResponse = await fetchCustomBranding();
373
+ const branding = decodeBranding({ brandingData: brandingResponse.brandingData });
374
+ logo = branding.logo;
375
+ brandTitle = branding.title;
376
+ primaryColor = branding.primaryColor;
377
+ secondaryColor = branding.secondaryColor;
378
+ background = branding.background;
379
+ backgroundImageUrl = branding.backgroundImage;
380
+ backgroundGradientStart = branding.backgroundGradientStart;
381
+ backgroundGradientEnd = branding.backgroundGradientEnd;
382
+ } catch (error) {
383
+ console.debug("[portal-components] branding fetch failed", error);
384
+ }
299
385
  }
300
386
  const baseLinks = links ?? defaultTopNavLinks;
301
387
  const hiddenSet = hiddenLabels ? new Set(hiddenLabels) : null;
@@ -306,20 +392,32 @@ var TopNav = async ({
306
392
  resolvedLinks = [...resolvedLinks, ...additionalLinks];
307
393
  }
308
394
  resolvedLinks = orderLinks(resolvedLinks, order);
309
- const gradientStart = customColor1 ?? "rgb(235, 102, 88)";
310
- const gradientEnd = customColor2 ?? customColor1 ?? "rgb(184, 83, 71)";
395
+ const getHeaderBackgroundStyle = () => {
396
+ if (background === "image" && backgroundImageUrl) {
397
+ return {
398
+ background: `url(${backgroundImageUrl})`,
399
+ backgroundImage: `linear-gradient(to top, rgba(255, 255, 255, 0.3) 30%, rgba(255, 255, 255, 0)), url(${backgroundImageUrl})`,
400
+ backgroundSize: "cover",
401
+ backgroundPosition: "center",
402
+ backgroundRepeat: "no-repeat"
403
+ };
404
+ }
405
+ const gradientStart = background === "custom" && backgroundGradientStart ? backgroundGradientStart : primaryColor;
406
+ const gradientEnd = background === "custom" && backgroundGradientEnd ? backgroundGradientEnd : secondaryColor;
407
+ return {
408
+ backgroundImage: `linear-gradient(to top, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0) 33%), linear-gradient(${gradientStart}, ${gradientEnd})`,
409
+ backgroundRepeat: "no-repeat",
410
+ backgroundSize: "100% 100%"
411
+ };
412
+ };
311
413
  return /* @__PURE__ */ jsxRuntime.jsx(
312
414
  "div",
313
415
  {
314
416
  className: "relative flex h-[280px] w-full items-start justify-center",
315
- style: {
316
- backgroundImage: `linear-gradient(to top, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0) 33%), linear-gradient(${gradientStart}, ${gradientEnd})`,
317
- backgroundRepeat: "no-repeat",
318
- backgroundSize: "100% 100%"
319
- },
320
- children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mx-auto mt-[30px] w-full max-w-[1248px] px-6", children: /* @__PURE__ */ jsxRuntime.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: [
417
+ style: getHeaderBackgroundStyle(),
418
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mx-auto mt-[30px] w-full max-w-[1248px] px-6", children: /* @__PURE__ */ jsxRuntime.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: [
321
419
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
322
- logo || brandTitle ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
420
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
323
421
  logo ? (
324
422
  // eslint-disable-next-line @next/next/no-img-element
325
423
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -334,9 +432,24 @@ var TopNav = async ({
334
432
  }
335
433
  }
336
434
  )
337
- ) : null,
338
- brandTitle ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-lg font-semibold text-gray-900", children: brandTitle }) : null
339
- ] }) : /* @__PURE__ */ jsxRuntime.jsx("div", {}),
435
+ ) : /* @__PURE__ */ jsxRuntime.jsxs(
436
+ "svg",
437
+ {
438
+ className: "h-8 w-8 text-gray-400",
439
+ viewBox: "0 0 24 24",
440
+ fill: "none",
441
+ stroke: "currentColor",
442
+ strokeWidth: "1.5",
443
+ "aria-hidden": "true",
444
+ children: [
445
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10" }),
446
+ /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx: "12", cy: "12", rx: "4", ry: "10" }),
447
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M2 12h20" })
448
+ ]
449
+ }
450
+ ),
451
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xl font-bold text-gray-900", children: brandTitle || "Enterprise Portal" })
452
+ ] }),
340
453
  /* @__PURE__ */ jsxRuntime.jsxs("details", { className: "group relative", children: [
341
454
  /* @__PURE__ */ jsxRuntime.jsxs("summary", { className: "flex cursor-pointer items-center gap-2 text-sm font-medium text-gray-600 hover:text-gray-900 list-none", children: [
342
455
  /* @__PURE__ */ jsxRuntime.jsxs(
@@ -398,7 +511,7 @@ var TopNav = async ({
398
511
  ] })
399
512
  ] })
400
513
  ] }),
401
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-3 flex flex-wrap gap-3 border-b border-gray-200 pb-2 text-sm font-medium text-gray-500", children: resolvedLinks.map(({ label, icon, href }) => {
514
+ /* @__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 }) => {
402
515
  const isActive = activeLabel === label;
403
516
  const className = `flex items-center gap-2 px-4 py-1 transition text-gray-500 ${isActive ? "underline underline-offset-8 decoration-2" : ""}`;
404
517
  if (href) {