@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,13 +1,19 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { a as CreateServiceAccountResult, F as FetchChannelReleasesResult, N as NetworkAvailability, c as CreateInstallOptionsResult, e as GetInstallOptionsResult, f as UpdateInstallOptionsResult, C as ChannelRelease } from './index-BAiVrSSR.mjs';
3
- export { h as CreateServiceAccountInput, p as InstallInstructions, I as InstallOptions, q as InstallStep, i as ServiceAccountData, m as createInstallOptions, g as createServiceAccount, l as fetchChannelReleases, o as filterEmbeddedClusterReleases, n as getInstallOptions, u as updateInstallOptions } from './index-BAiVrSSR.mjs';
2
+ import { a as CreateServiceAccountResult, F as FetchChannelReleasesResult, N as NetworkAvailability, c as CreateInstallOptionsResult, e as GetInstallOptionsResult, f as UpdateInstallOptionsResult, C as ChannelRelease } from './index-DyzJ0yKD.mjs';
3
+ export { h as CreateServiceAccountInput, n as InstallInstructions, I as InstallOptions, o as InstallStep, i as ServiceAccountData, k as createInstallOptions, g as createServiceAccount, j as fetchChannelReleases, m as filterEmbeddedClusterReleases, l as getInstallOptions, u as updateInstallOptions } from './index-DyzJ0yKD.mjs';
4
+ import './fetch-license-iTyF7_GY.mjs';
4
5
  import './actions/change-team.mjs';
6
+ import './actions/trial-signup.mjs';
5
7
 
6
8
  declare const LINUX_INSTALL_SERVICE_ACCOUNT_KEY = "linux_install_service_account";
7
9
  declare const LINUX_INSTALL_OPTIONS_KEY = "linux_install_options";
8
10
  interface LinuxInstallWizardProps {
9
11
  /** JWT token for authentication */
10
12
  token: string;
13
+ /** Primary branding color for buttons (default: DEFAULT_SECONDARY_COLOR) */
14
+ primaryColor?: string;
15
+ /** Secondary branding color for links (default: DEFAULT_SECONDARY_COLOR) */
16
+ secondaryColor?: string;
11
17
  /** Server action to create service account - REQUIRED */
12
18
  createServiceAccountAction: (name: string, token: string) => Promise<CreateServiceAccountResult>;
13
19
  /** Server action to fetch channel releases - REQUIRED for version dropdown */
@@ -59,7 +65,7 @@ interface LinuxInstallWizardProps {
59
65
  supportPortalLink?: string;
60
66
  }
61
67
  declare const LinuxInstallWizard: {
62
- ({ token, createServiceAccountAction, fetchChannelReleasesAction, createInstallOptionsAction, getInstallOptionsAction, updateInstallOptionsAction, onStepChange, onInstallOptionsIdChange, initialStep, initialNetwork, initialInstallOptionsId, initialInstallOptionsData, initialChannelReleases, supportPortalLink }: LinuxInstallWizardProps): react_jsx_runtime.JSX.Element;
68
+ ({ token, primaryColor, secondaryColor, createServiceAccountAction, fetchChannelReleasesAction, createInstallOptionsAction, getInstallOptionsAction, updateInstallOptionsAction, onStepChange, onInstallOptionsIdChange, initialStep, initialNetwork, initialInstallOptionsId, initialInstallOptionsData, initialChannelReleases, supportPortalLink }: LinuxInstallWizardProps): react_jsx_runtime.JSX.Element;
63
69
  displayName: string;
64
70
  };
65
71
 
@@ -1,13 +1,19 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { a as CreateServiceAccountResult, F as FetchChannelReleasesResult, N as NetworkAvailability, c as CreateInstallOptionsResult, e as GetInstallOptionsResult, f as UpdateInstallOptionsResult, C as ChannelRelease } from './index-DWt-N5od.js';
3
- export { h as CreateServiceAccountInput, p as InstallInstructions, I as InstallOptions, q as InstallStep, i as ServiceAccountData, m as createInstallOptions, g as createServiceAccount, l as fetchChannelReleases, o as filterEmbeddedClusterReleases, n as getInstallOptions, u as updateInstallOptions } from './index-DWt-N5od.js';
2
+ import { a as CreateServiceAccountResult, F as FetchChannelReleasesResult, N as NetworkAvailability, c as CreateInstallOptionsResult, e as GetInstallOptionsResult, f as UpdateInstallOptionsResult, C as ChannelRelease } from './index-sMbq94M7.js';
3
+ export { h as CreateServiceAccountInput, n as InstallInstructions, I as InstallOptions, o as InstallStep, i as ServiceAccountData, k as createInstallOptions, g as createServiceAccount, j as fetchChannelReleases, m as filterEmbeddedClusterReleases, l as getInstallOptions, u as updateInstallOptions } from './index-sMbq94M7.js';
4
+ import './fetch-license-iTyF7_GY.js';
4
5
  import './actions/change-team.js';
6
+ import './actions/trial-signup.js';
5
7
 
6
8
  declare const LINUX_INSTALL_SERVICE_ACCOUNT_KEY = "linux_install_service_account";
7
9
  declare const LINUX_INSTALL_OPTIONS_KEY = "linux_install_options";
8
10
  interface LinuxInstallWizardProps {
9
11
  /** JWT token for authentication */
10
12
  token: string;
13
+ /** Primary branding color for buttons (default: DEFAULT_SECONDARY_COLOR) */
14
+ primaryColor?: string;
15
+ /** Secondary branding color for links (default: DEFAULT_SECONDARY_COLOR) */
16
+ secondaryColor?: string;
11
17
  /** Server action to create service account - REQUIRED */
12
18
  createServiceAccountAction: (name: string, token: string) => Promise<CreateServiceAccountResult>;
13
19
  /** Server action to fetch channel releases - REQUIRED for version dropdown */
@@ -59,7 +65,7 @@ interface LinuxInstallWizardProps {
59
65
  supportPortalLink?: string;
60
66
  }
61
67
  declare const LinuxInstallWizard: {
62
- ({ token, createServiceAccountAction, fetchChannelReleasesAction, createInstallOptionsAction, getInstallOptionsAction, updateInstallOptionsAction, onStepChange, onInstallOptionsIdChange, initialStep, initialNetwork, initialInstallOptionsId, initialInstallOptionsData, initialChannelReleases, supportPortalLink }: LinuxInstallWizardProps): react_jsx_runtime.JSX.Element;
68
+ ({ token, primaryColor, secondaryColor, createServiceAccountAction, fetchChannelReleasesAction, createInstallOptionsAction, getInstallOptionsAction, updateInstallOptionsAction, onStepChange, onInstallOptionsIdChange, initialStep, initialNetwork, initialInstallOptionsId, initialInstallOptionsData, initialChannelReleases, supportPortalLink }: LinuxInstallWizardProps): react_jsx_runtime.JSX.Element;
63
69
  displayName: string;
64
70
  };
65
71
 
@@ -8,7 +8,40 @@ var buffer = require('buffer');
8
8
  * Enterprise Portal Components
9
9
  * This file is generated by tsup. Do not edit manually.
10
10
  */
11
+ var __defProp = Object.defineProperty;
12
+ var __export = (target, all) => {
13
+ for (var name in all)
14
+ __defProp(target, name, { get: all[name], enumerable: true });
15
+ };
16
+
17
+ // datadog/tracer.ts
18
+ var tracer_exports = {};
19
+ __export(tracer_exports, {
20
+ default: () => tracer_default
21
+ });
22
+ var tracer_default;
11
23
 
24
+ // src/utils/constants.ts
25
+ var DEFAULT_SECONDARY_COLOR = "#6366f1";
26
+ function useCopyToClipboard(resetDelay = 2e3) {
27
+ const [copied, setCopied] = react.useState(false);
28
+ const copy = react.useCallback(async (text) => {
29
+ if (!navigator.clipboard) {
30
+ console.warn("[useCopyToClipboard] Clipboard API not available");
31
+ return false;
32
+ }
33
+ try {
34
+ await navigator.clipboard.writeText(text);
35
+ setCopied(true);
36
+ setTimeout(() => setCopied(false), resetDelay);
37
+ return true;
38
+ } catch (error) {
39
+ console.error("[useCopyToClipboard] Failed to copy:", error);
40
+ return false;
41
+ }
42
+ }, [resetDelay]);
43
+ return { copy, copied };
44
+ }
12
45
  var LINUX_INSTALL_SERVICE_ACCOUNT_KEY = "linux_install_service_account";
13
46
  var LINUX_INSTALL_OPTIONS_KEY = "linux_install_options";
14
47
  var navigateTo = (href) => {
@@ -21,19 +54,12 @@ var navigateTo = (href) => {
21
54
  console.error("[linux-install-wizard] navigation failed", error);
22
55
  }
23
56
  };
24
- var copyToClipboard = async (text) => {
25
- try {
26
- await navigator.clipboard.writeText(text);
27
- return true;
28
- } catch {
29
- return false;
30
- }
31
- };
32
- var StepIndicator = ({ step }) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-center gap-3", children: [
57
+ var StepIndicator = ({ step, primaryColor = DEFAULT_SECONDARY_COLOR }) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-center gap-3", children: [
33
58
  /* @__PURE__ */ jsxRuntime.jsx(
34
59
  "div",
35
60
  {
36
- className: `flex h-10 w-10 items-center justify-center rounded-full border-2 ${step > 1 ? "border-gray-900 bg-gray-900 text-white" : "border-indigo-500"}`,
61
+ className: `flex h-10 w-10 items-center justify-center rounded-full border-2 ${step > 1 ? "border-gray-900 bg-gray-900 text-white" : ""}`,
62
+ style: step === 1 ? { borderColor: primaryColor } : void 0,
37
63
  children: step > 1 ? /* @__PURE__ */ jsxRuntime.jsx(
38
64
  "svg",
39
65
  {
@@ -45,7 +71,7 @@ var StepIndicator = ({ step }) => /* @__PURE__ */ jsxRuntime.jsxs("div", { class
45
71
  strokeWidth: "2",
46
72
  children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m3.5 8 3 3 6-6" })
47
73
  }
48
- ) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "h-2.5 w-2.5 rounded-full bg-indigo-500" })
74
+ ) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "h-2.5 w-2.5 rounded-full", style: { backgroundColor: primaryColor } })
49
75
  }
50
76
  ),
51
77
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: `h-0.5 w-12 ${step > 1 ? "bg-gray-900" : "bg-gray-200"}` }),
@@ -61,13 +87,11 @@ var CodeBlock = ({
61
87
  command,
62
88
  onCopy
63
89
  }) => {
64
- const [copied, setCopied] = react.useState(false);
90
+ const { copy, copied } = useCopyToClipboard();
65
91
  const handleCopy = async () => {
66
- const success = await copyToClipboard(command);
92
+ const success = await copy(command);
67
93
  if (success) {
68
- setCopied(true);
69
94
  onCopy?.();
70
- setTimeout(() => setCopied(false), 2e3);
71
95
  }
72
96
  };
73
97
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "group relative ml-8 mt-2 min-w-0", children: [
@@ -89,11 +113,12 @@ var VersionDropdown = ({
89
113
  selectedRelease,
90
114
  onSelect,
91
115
  isLoading,
92
- error
116
+ error,
117
+ primaryColor = DEFAULT_SECONDARY_COLOR
93
118
  }) => {
94
119
  if (isLoading) {
95
120
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "ml-8 flex items-center gap-2 text-sm text-gray-500", children: [
96
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-4 w-4 animate-spin rounded-full border-2 border-gray-300 border-t-indigo-500" }),
121
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-4 w-4 animate-spin rounded-full border-2 border-gray-300", style: { borderTopColor: primaryColor } }),
97
122
  "Loading versions..."
98
123
  ] });
99
124
  }
@@ -133,13 +158,14 @@ var InstallationInstructions = ({
133
158
  instructions,
134
159
  isLoading,
135
160
  completedSteps = {},
136
- isProxy = false
161
+ isProxy = false,
162
+ primaryColor = DEFAULT_SECONDARY_COLOR
137
163
  }) => {
138
164
  if (isLoading && !instructions?.steps?.length) {
139
165
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
140
166
  /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-lg font-semibold text-gray-900", children: "Installation Instructions" }),
141
167
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 text-sm text-gray-500", children: [
142
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-4 w-4 animate-spin rounded-full border-2 border-gray-300 border-t-indigo-500" }),
168
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-4 w-4 animate-spin rounded-full border-2 border-gray-300", style: { borderTopColor: primaryColor } }),
143
169
  "Loading instructions..."
144
170
  ] })
145
171
  ] });
@@ -149,10 +175,10 @@ var InstallationInstructions = ({
149
175
  }
150
176
  const stepOffset = isProxy ? 3 : 2;
151
177
  console.debug("[InstallationInstructions] Rendering with stepOffset", { isProxy, stepOffset, stepsCount: instructions?.steps?.length });
152
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `min-w-0 space-y-4 transition-opacity duration-150 ${isLoading ? "opacity-60" : ""}`, children: [
178
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `min-w-0 space-y-4 transition-opacity duration-200 ${isLoading ? "opacity-60" : ""}`, children: [
153
179
  /* @__PURE__ */ jsxRuntime.jsxs("h3", { className: "text-lg font-semibold text-gray-900", children: [
154
180
  "Installation Instructions",
155
- isLoading && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-2 inline-block h-4 w-4 animate-spin rounded-full border-2 border-gray-300 border-t-indigo-500" })
181
+ isLoading && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-2 inline-block h-4 w-4 animate-spin rounded-full border-2 border-gray-300", style: { borderTopColor: primaryColor } })
156
182
  ] }),
157
183
  /* @__PURE__ */ jsxRuntime.jsx("ol", { className: "min-w-0 space-y-6 text-sm text-gray-700", children: instructions.steps.map((step, index) => {
158
184
  const completableStepNames = ["download_assets", "install"];
@@ -160,7 +186,7 @@ var InstallationInstructions = ({
160
186
  const isCompleted = canComplete && completedSteps[step.step_name];
161
187
  return /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "space-y-2", children: [
162
188
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
163
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex h-6 w-6 items-center justify-center rounded-full bg-indigo-100 font-semibold text-indigo-500", children: index + stepOffset }),
189
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex h-6 w-6 items-center justify-center rounded-full font-semibold", style: { backgroundColor: `${primaryColor}20`, color: primaryColor }, children: index + stepOffset }),
164
190
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium text-gray-900", children: step.title }),
165
191
  canComplete && /* @__PURE__ */ jsxRuntime.jsx(
166
192
  "span",
@@ -179,6 +205,8 @@ var InstallationInstructions = ({
179
205
  };
180
206
  var LinuxInstallWizard = ({
181
207
  token,
208
+ primaryColor = DEFAULT_SECONDARY_COLOR,
209
+ secondaryColor = DEFAULT_SECONDARY_COLOR,
182
210
  createServiceAccountAction,
183
211
  fetchChannelReleasesAction,
184
212
  createInstallOptionsAction,
@@ -610,7 +638,7 @@ var LinuxInstallWizard = ({
610
638
  console.error("[linux-install-wizard] Failed to save admin console URL", error);
611
639
  }
612
640
  }
613
- navigateTo("/update");
641
+ navigateTo("/updates/checking");
614
642
  }, [installOptionsId, updateInstallOptionsAction, adminConsoleUrl, token]);
615
643
  const handleReleaseSelect = react.useCallback((release) => {
616
644
  setSelectedRelease(release);
@@ -618,14 +646,14 @@ var LinuxInstallWizard = ({
618
646
  const isProxy = networkAvailability === "proxy";
619
647
  if (step === 2) {
620
648
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-6", children: [
621
- /* @__PURE__ */ jsxRuntime.jsx(StepIndicator, { step: 2 }),
649
+ /* @__PURE__ */ jsxRuntime.jsx(StepIndicator, { step: 2, primaryColor }),
622
650
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-hidden rounded-2xl border border-gray-100 bg-gray-50 p-6", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 space-y-6", children: [
623
651
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0", children: [
624
652
  /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-xl font-semibold text-gray-900", children: isProxy ? "Linux Single Node Proxy Install" : "Linux Single Node Online Install" }),
625
653
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-6 space-y-6", children: [
626
654
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
627
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 text-indigo-500", children: [
628
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex h-6 w-6 items-center justify-center rounded-full bg-indigo-100 font-semibold", children: "1" }),
655
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", style: { color: primaryColor }, children: [
656
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex h-6 w-6 items-center justify-center rounded-full font-semibold", style: { backgroundColor: `${primaryColor}20` }, children: "1" }),
629
657
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium text-gray-900", children: "Select a version" })
630
658
  ] }),
631
659
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -635,13 +663,14 @@ var LinuxInstallWizard = ({
635
663
  selectedRelease,
636
664
  onSelect: handleReleaseSelect,
637
665
  isLoading: isLoadingReleases,
638
- error: releasesError
666
+ error: releasesError,
667
+ primaryColor
639
668
  }
640
669
  )
641
670
  ] }),
642
671
  isProxy && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
643
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 text-indigo-500", children: [
644
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex h-6 w-6 items-center justify-center rounded-full bg-indigo-100 font-semibold", children: "2" }),
672
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", style: { color: primaryColor }, children: [
673
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex h-6 w-6 items-center justify-center rounded-full font-semibold", style: { backgroundColor: `${primaryColor}20` }, children: "2" }),
645
674
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium text-gray-900", children: "Configure proxy URL" })
646
675
  ] }),
647
676
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -660,12 +689,13 @@ var LinuxInstallWizard = ({
660
689
  instructions,
661
690
  isLoading: isLoadingInstructions,
662
691
  completedSteps,
663
- isProxy
692
+ isProxy,
693
+ primaryColor
664
694
  }
665
695
  ),
666
696
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
667
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 text-indigo-500", children: [
668
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex h-6 w-6 items-center justify-center rounded-full bg-indigo-100 font-semibold", children: (instructions?.steps?.length ?? 0) + (isProxy ? 3 : 2) }),
697
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", style: { color: primaryColor }, children: [
698
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex h-6 w-6 items-center justify-center rounded-full font-semibold", style: { backgroundColor: `${primaryColor}20` }, children: (instructions?.steps?.length ?? 0) + (isProxy ? 3 : 2) }),
669
699
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium text-gray-900", children: "(Optional) Add the Admin Console URL" })
670
700
  ] }),
671
701
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -697,7 +727,8 @@ var LinuxInstallWizard = ({
697
727
  {
698
728
  type: "button",
699
729
  onClick: handleFinish,
700
- className: "rounded-xl bg-indigo-500 px-4 py-2 font-medium text-white transition hover:bg-indigo-600",
730
+ className: "rounded-xl px-4 py-2 font-medium text-white transition hover:brightness-90",
731
+ style: { backgroundColor: primaryColor },
701
732
  children: "Finish"
702
733
  }
703
734
  )
@@ -708,7 +739,8 @@ var LinuxInstallWizard = ({
708
739
  /* @__PURE__ */ jsxRuntime.jsx(
709
740
  "a",
710
741
  {
711
- className: "text-indigo-500 hover:text-indigo-600",
742
+ className: "hover:opacity-80",
743
+ style: { color: secondaryColor },
712
744
  href: supportPortalLink,
713
745
  target: "_blank",
714
746
  rel: "noopener noreferrer",
@@ -720,7 +752,7 @@ var LinuxInstallWizard = ({
720
752
  ] });
721
753
  }
722
754
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-6", children: [
723
- /* @__PURE__ */ jsxRuntime.jsx(StepIndicator, { step: 1 }),
755
+ /* @__PURE__ */ jsxRuntime.jsx(StepIndicator, { step: 1, primaryColor }),
724
756
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-2xl border border-gray-100 bg-gray-50 p-6", children: [
725
757
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
726
758
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "block text-sm font-medium text-gray-700", children: [
@@ -789,7 +821,8 @@ var LinuxInstallWizard = ({
789
821
  type: "button",
790
822
  onClick: handleContinue,
791
823
  disabled: isCreatingServiceAccount,
792
- className: "rounded-xl bg-indigo-500 px-4 py-2 font-medium text-white transition hover:bg-indigo-600 disabled:cursor-not-allowed disabled:opacity-50",
824
+ className: "rounded-xl px-4 py-2 font-medium text-white transition-opacity duration-200 hover:opacity-90 disabled:cursor-not-allowed disabled:opacity-50",
825
+ style: { backgroundColor: primaryColor },
793
826
  children: isCreatingServiceAccount ? "Creating..." : "Continue"
794
827
  }
795
828
  )
@@ -822,8 +855,17 @@ async function handle401() {
822
855
  const { redirect } = await import('next/navigation');
823
856
  return redirect("/?expired=1");
824
857
  }
858
+ function isErrorPage(url) {
859
+ try {
860
+ const urlObj = new URL(url);
861
+ return urlObj.pathname === "/error";
862
+ } catch {
863
+ return url === "/error" || url.startsWith("/error?");
864
+ }
865
+ }
825
866
  async function handleServerError(statusCode) {
826
867
  const { redirect } = await import('next/navigation');
868
+ const { cookies } = await import('next/headers');
827
869
  let sourceUrl;
828
870
  try {
829
871
  const { headers } = await import('next/headers');
@@ -831,12 +873,20 @@ async function handleServerError(statusCode) {
831
873
  const referer = headersList.get("referer");
832
874
  const host = headersList.get("host");
833
875
  const pathname = headersList.get("x-invoke-path") || headersList.get("x-forwarded-path");
834
- if (referer) {
876
+ if (referer && !isErrorPage(referer)) {
835
877
  sourceUrl = referer;
836
878
  } else if (host && pathname) {
837
879
  const protocol = headersList.get("x-forwarded-proto") || "https";
838
880
  sourceUrl = `${protocol}://${host}${pathname}`;
839
881
  }
882
+ if (!sourceUrl || isErrorPage(sourceUrl)) {
883
+ const cookieStore = await cookies();
884
+ const preservedSource = cookieStore.get("portal_error_source");
885
+ if (preservedSource?.value) {
886
+ sourceUrl = decodeURIComponent(preservedSource.value);
887
+ cookieStore.delete("portal_error_source");
888
+ }
889
+ }
840
890
  } catch (error) {
841
891
  console.debug("[portal-components] Could not determine source URL", error);
842
892
  }
@@ -1152,11 +1202,15 @@ var fetchCustomBrandingImpl = async () => {
1152
1202
  const payload = await response.json();
1153
1203
  const brandingObject = {
1154
1204
  logo: payload.logoUrl,
1155
- title: payload.appName,
1156
- customColor1: payload.primaryColor,
1157
- customColor2: payload.secondaryColor,
1205
+ title: payload.title,
1206
+ primaryColor: payload.primaryColor,
1207
+ secondaryColor: payload.secondaryColor,
1158
1208
  favicon: payload.faviconUrl,
1159
- supportPortalLink: payload.supportPortalLink || ""
1209
+ supportPortalLink: payload.supportPortalLink || "",
1210
+ background: payload.background,
1211
+ backgroundImage: payload.backgroundImage,
1212
+ customColor1: payload.customColor1,
1213
+ customColor2: payload.customColor2
1160
1214
  };
1161
1215
  const brandingData = buffer.Buffer.from(JSON.stringify(brandingObject)).toString("base64");
1162
1216
  return {