@replicated/portal-components 0.0.26 → 0.0.28

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 (150) hide show
  1. package/components/metadata/registry.json +2 -2
  2. package/components/metadata/registry.md +2 -2
  3. package/dist/actions/branding-actions.d.mts +1 -1
  4. package/dist/actions/branding-actions.d.ts +1 -1
  5. package/dist/actions/branding-actions.js +15 -5
  6. package/dist/actions/branding-actions.js.map +1 -1
  7. package/dist/actions/change-team.js +13 -3
  8. package/dist/actions/change-team.js.map +1 -1
  9. package/dist/actions/index.d.mts +1 -1
  10. package/dist/actions/index.d.ts +1 -1
  11. package/dist/actions/index.js +16 -15
  12. package/dist/actions/index.js.map +1 -1
  13. package/dist/actions/install-actions.d.mts +1 -1
  14. package/dist/actions/install-actions.d.ts +1 -1
  15. package/dist/actions/install-actions.js +13 -3
  16. package/dist/actions/install-actions.js.map +1 -1
  17. package/dist/actions/invite-actions.js +13 -3
  18. package/dist/actions/invite-actions.js.map +1 -1
  19. package/dist/actions/magic-link-actions.js +13 -3
  20. package/dist/actions/magic-link-actions.js.map +1 -1
  21. package/dist/actions/service-account.d.mts +1 -1
  22. package/dist/actions/service-account.d.ts +1 -1
  23. package/dist/actions/service-account.js +13 -3
  24. package/dist/actions/service-account.js.map +1 -1
  25. package/dist/actions/support-bundles.d.mts +1 -1
  26. package/dist/actions/support-bundles.d.ts +1 -1
  27. package/dist/actions/support-bundles.js +13 -3
  28. package/dist/actions/support-bundles.js.map +1 -1
  29. package/dist/actions/team-settings.d.mts +1 -1
  30. package/dist/actions/team-settings.d.ts +1 -1
  31. package/dist/actions/team-settings.js +13 -3
  32. package/dist/actions/team-settings.js.map +1 -1
  33. package/dist/actions/trial-signup-actions.js +13 -3
  34. package/dist/actions/trial-signup-actions.js.map +1 -1
  35. package/dist/actions/trial-signup.js +13 -3
  36. package/dist/actions/trial-signup.js.map +1 -1
  37. package/dist/actions/user-settings.d.mts +1 -1
  38. package/dist/actions/user-settings.d.ts +1 -1
  39. package/dist/actions/user-settings.js +13 -3
  40. package/dist/actions/user-settings.js.map +1 -1
  41. package/dist/airgap-instances.d.mts +1 -1
  42. package/dist/airgap-instances.d.ts +1 -1
  43. package/dist/api/saml.js +13 -3
  44. package/dist/api/saml.js.map +1 -1
  45. package/dist/api/support-bundles.js +13 -3
  46. package/dist/api/support-bundles.js.map +1 -1
  47. package/dist/{branding-DmsrDTNE.d.mts → branding-C5H0L6Vi.d.mts} +13 -1
  48. package/dist/{branding-DmsrDTNE.d.ts → branding-C5H0L6Vi.d.ts} +13 -1
  49. package/dist/esm/actions/branding-actions.js +15 -5
  50. package/dist/esm/actions/branding-actions.js.map +1 -1
  51. package/dist/esm/actions/change-team.js +13 -3
  52. package/dist/esm/actions/change-team.js.map +1 -1
  53. package/dist/esm/actions/index.js +16 -15
  54. package/dist/esm/actions/index.js.map +1 -1
  55. package/dist/esm/actions/install-actions.js +13 -3
  56. package/dist/esm/actions/install-actions.js.map +1 -1
  57. package/dist/esm/actions/invite-actions.js +13 -3
  58. package/dist/esm/actions/invite-actions.js.map +1 -1
  59. package/dist/esm/actions/magic-link-actions.js +13 -3
  60. package/dist/esm/actions/magic-link-actions.js.map +1 -1
  61. package/dist/esm/actions/service-account.js +13 -3
  62. package/dist/esm/actions/service-account.js.map +1 -1
  63. package/dist/esm/actions/support-bundles.js +13 -3
  64. package/dist/esm/actions/support-bundles.js.map +1 -1
  65. package/dist/esm/actions/team-settings.js +13 -3
  66. package/dist/esm/actions/team-settings.js.map +1 -1
  67. package/dist/esm/actions/trial-signup-actions.js +13 -3
  68. package/dist/esm/actions/trial-signup-actions.js.map +1 -1
  69. package/dist/esm/actions/trial-signup.js +13 -3
  70. package/dist/esm/actions/trial-signup.js.map +1 -1
  71. package/dist/esm/actions/user-settings.js +13 -3
  72. package/dist/esm/actions/user-settings.js.map +1 -1
  73. package/dist/esm/api/saml.js +13 -3
  74. package/dist/esm/api/saml.js.map +1 -1
  75. package/dist/esm/api/support-bundles.js +13 -3
  76. package/dist/esm/api/support-bundles.js.map +1 -1
  77. package/dist/esm/helm-install-wizard.js +13 -3
  78. package/dist/esm/helm-install-wizard.js.map +1 -1
  79. package/dist/esm/index.js +51 -9
  80. package/dist/esm/index.js.map +1 -1
  81. package/dist/esm/install-actions.js +13 -3
  82. package/dist/esm/install-actions.js.map +1 -1
  83. package/dist/esm/license-details.js +13 -3
  84. package/dist/esm/license-details.js.map +1 -1
  85. package/dist/esm/linux-install-wizard.js +13 -3
  86. package/dist/esm/linux-install-wizard.js.map +1 -1
  87. package/dist/esm/security-card.js +39 -24
  88. package/dist/esm/security-card.js.map +1 -1
  89. package/dist/esm/support-card.js +13 -3
  90. package/dist/esm/support-card.js.map +1 -1
  91. package/dist/esm/top-nav.js +34 -7
  92. package/dist/esm/top-nav.js.map +1 -1
  93. package/dist/esm/update-layout.js +34 -7
  94. package/dist/esm/update-layout.js.map +1 -1
  95. package/dist/esm/user-menu-dropdown.js +6 -3
  96. package/dist/esm/user-menu-dropdown.js.map +1 -1
  97. package/dist/esm/utils/index.js +44 -5
  98. package/dist/esm/utils/index.js.map +1 -1
  99. package/dist/helm-install-wizard.d.mts +2 -2
  100. package/dist/helm-install-wizard.d.ts +2 -2
  101. package/dist/helm-install-wizard.js +13 -3
  102. package/dist/helm-install-wizard.js.map +1 -1
  103. package/dist/{index-Bcp17Mf3.d.ts → index-7ibNULXY.d.ts} +3 -1
  104. package/dist/{index-DaH1bSuO.d.mts → index-CITwEYtK.d.mts} +3 -1
  105. package/dist/index.d.mts +3 -3
  106. package/dist/index.d.ts +3 -3
  107. package/dist/index.js +51 -8
  108. package/dist/index.js.map +1 -1
  109. package/dist/install-actions.d.mts +2 -2
  110. package/dist/install-actions.d.ts +2 -2
  111. package/dist/install-actions.js +13 -3
  112. package/dist/install-actions.js.map +1 -1
  113. package/dist/instance-card.d.mts +1 -1
  114. package/dist/instance-card.d.ts +1 -1
  115. package/dist/license-details.js +13 -3
  116. package/dist/license-details.js.map +1 -1
  117. package/dist/linux-install-wizard.d.mts +2 -2
  118. package/dist/linux-install-wizard.d.ts +2 -2
  119. package/dist/linux-install-wizard.js +13 -3
  120. package/dist/linux-install-wizard.js.map +1 -1
  121. package/dist/online-instance-list.d.mts +1 -1
  122. package/dist/online-instance-list.d.ts +1 -1
  123. package/dist/pending-installations.d.mts +1 -1
  124. package/dist/pending-installations.d.ts +1 -1
  125. package/dist/security-card.d.mts +1 -1
  126. package/dist/security-card.d.ts +1 -1
  127. package/dist/security-card.js +43 -24
  128. package/dist/security-card.js.map +1 -1
  129. package/dist/styles.css +16 -12
  130. package/dist/support-bundles-card.d.mts +1 -1
  131. package/dist/support-bundles-card.d.ts +1 -1
  132. package/dist/support-card.js +13 -3
  133. package/dist/support-card.js.map +1 -1
  134. package/dist/{top-nav-8f2U69MF.d.ts → top-nav-B2FVC4rl.d.ts} +1 -1
  135. package/dist/{top-nav-B2yA3PC7.d.mts → top-nav-Cf8zMq1A.d.mts} +1 -1
  136. package/dist/top-nav.d.mts +2 -2
  137. package/dist/top-nav.d.ts +2 -2
  138. package/dist/top-nav.js +34 -7
  139. package/dist/top-nav.js.map +1 -1
  140. package/dist/update-layout.js +34 -7
  141. package/dist/update-layout.js.map +1 -1
  142. package/dist/user-menu-dropdown.d.mts +2 -1
  143. package/dist/user-menu-dropdown.d.ts +2 -1
  144. package/dist/user-menu-dropdown.js +6 -3
  145. package/dist/user-menu-dropdown.js.map +1 -1
  146. package/dist/utils/index.d.mts +2 -2
  147. package/dist/utils/index.d.ts +2 -2
  148. package/dist/utils/index.js +44 -4
  149. package/dist/utils/index.js.map +1 -1
  150. package/package.json +1 -1
@@ -5,12 +5,13 @@ interface UserMenuDropdownProps {
5
5
  displayLabel: string;
6
6
  children: ReactNode;
7
7
  className?: string;
8
+ dark?: boolean;
8
9
  }
9
10
  /**
10
11
  * Reusable user menu dropdown component using HTML details element.
11
12
  * Works with TopNavMenuClose for click-away behavior.
12
13
  */
13
- declare function UserMenuDropdown({ displayLabel, children, className }: UserMenuDropdownProps): react_jsx_runtime.JSX.Element;
14
+ declare function UserMenuDropdown({ displayLabel, children, className, dark }: UserMenuDropdownProps): react_jsx_runtime.JSX.Element;
14
15
 
15
16
  interface UserMenuItemProps {
16
17
  href: string;
@@ -5,12 +5,13 @@ interface UserMenuDropdownProps {
5
5
  displayLabel: string;
6
6
  children: ReactNode;
7
7
  className?: string;
8
+ dark?: boolean;
8
9
  }
9
10
  /**
10
11
  * Reusable user menu dropdown component using HTML details element.
11
12
  * Works with TopNavMenuClose for click-away behavior.
12
13
  */
13
- declare function UserMenuDropdown({ displayLabel, children, className }: UserMenuDropdownProps): react_jsx_runtime.JSX.Element;
14
+ declare function UserMenuDropdown({ displayLabel, children, className, dark }: UserMenuDropdownProps): react_jsx_runtime.JSX.Element;
14
15
 
15
16
  interface UserMenuItemProps {
16
17
  href: string;
@@ -16,10 +16,13 @@ var Link__default = /*#__PURE__*/_interopDefault(Link);
16
16
  function UserMenuDropdown({
17
17
  displayLabel,
18
18
  children,
19
- className = ""
19
+ className = "",
20
+ dark = false
20
21
  }) {
22
+ const summaryClass = dark ? "flex cursor-pointer items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium text-white/90 hover:bg-white/10 transition-colors list-none border border-transparent hover:border-white/20" : "flex cursor-pointer items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 transition-colors list-none border border-transparent hover:border-gray-200";
23
+ const chevronClass = dark ? "h-4 w-4 text-white/50 transition-transform group-open:rotate-180" : "h-4 w-4 text-gray-500 transition-transform group-open:rotate-180";
21
24
  return /* @__PURE__ */ jsxRuntime.jsxs("details", { className: `group relative ${className}`, children: [
22
- /* @__PURE__ */ jsxRuntime.jsxs("summary", { className: "flex cursor-pointer items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 transition-colors list-none border border-transparent hover:border-gray-200", children: [
25
+ /* @__PURE__ */ jsxRuntime.jsxs("summary", { className: summaryClass, children: [
23
26
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.User, { className: "h-4 w-4" }),
24
27
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: displayLabel }),
25
28
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -34,7 +37,7 @@ function UserMenuDropdown({
34
37
  strokeWidth: "2",
35
38
  strokeLinecap: "round",
36
39
  strokeLinejoin: "round",
37
- className: "h-4 w-4 text-gray-500 transition-transform group-open:rotate-180",
40
+ className: chevronClass,
38
41
  children: /* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "6 9 12 15 18 9" })
39
42
  }
40
43
  )
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/user-menu-dropdown.tsx","../src/components/user-menu-item.tsx"],"names":["jsxs","jsx","User","Link"],"mappings":";;;;;;;;;;;;;;;AAaO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,YAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA,GAAY;AACd,CAAA,EAA0B;AACxB,EAAA,uBACEA,eAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAW,CAAA,eAAA,EAAkB,SAAS,CAAA,CAAA,EAC7C,QAAA,EAAA;AAAA,oBAAAA,eAAA,CAAC,SAAA,EAAA,EAAQ,WAAU,4LAAA,EACjB,QAAA,EAAA;AAAA,sBAAAC,cAAA,CAACC,gBAAA,EAAA,EAAK,WAAU,SAAA,EAAU,CAAA;AAAA,sBAC1BD,cAAA,CAAC,UAAM,QAAA,EAAA,YAAA,EAAa,CAAA;AAAA,sBACpBA,cAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAM,4BAAA;AAAA,UACN,KAAA,EAAM,IAAA;AAAA,UACN,MAAA,EAAO,IAAA;AAAA,UACP,OAAA,EAAQ,WAAA;AAAA,UACR,IAAA,EAAK,MAAA;AAAA,UACL,MAAA,EAAO,cAAA;AAAA,UACP,WAAA,EAAY,GAAA;AAAA,UACZ,aAAA,EAAc,OAAA;AAAA,UACd,cAAA,EAAe,OAAA;AAAA,UACf,SAAA,EAAU,kEAAA;AAAA,UAEV,QAAA,kBAAAA,cAAA,CAAC,UAAA,EAAA,EAAS,MAAA,EAAO,gBAAA,EAAiB;AAAA;AAAA;AACpC,KAAA,EACF,CAAA;AAAA,oBACAA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6FAAA,EACZ,QAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ;AC/BO,SAAS,YAAA,CAAa,EAAE,IAAA,EAAM,QAAA,EAAS,EAAsB;AAClE,EAAA,uBACEA,cAAAA;AAAA,IAACE,qBAAA;AAAA,IAAA;AAAA,MACC,IAAA;AAAA,MACA,SAAA,EAAU,mFAAA;AAAA,MAET;AAAA;AAAA,GACH;AAEJ","file":"user-menu-dropdown.js","sourcesContent":["import type { ReactNode } from \"react\";\nimport { User } from \"lucide-react\";\n\nexport interface UserMenuDropdownProps {\n displayLabel: string;\n children: ReactNode;\n className?: string;\n}\n\n/**\n * Reusable user menu dropdown component using HTML details element.\n * Works with TopNavMenuClose for click-away behavior.\n */\nexport function UserMenuDropdown({ \n displayLabel, \n children, \n className = \"\" \n}: UserMenuDropdownProps) {\n return (\n <details className={`group relative ${className}`}>\n <summary className=\"flex cursor-pointer items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 transition-colors list-none border border-transparent hover:border-gray-200\">\n <User className=\"h-4 w-4\" />\n <span>{displayLabel}</span>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"h-4 w-4 text-gray-500 transition-transform group-open:rotate-180\"\n >\n <polyline points=\"6 9 12 15 18 9\"></polyline>\n </svg>\n </summary>\n <div className=\"absolute right-0 mt-2 w-52 rounded-lg border border-gray-200 bg-white py-1.5 shadow-xl z-50\">\n {children}\n </div>\n </details>\n );\n}\n","import type { ReactNode } from \"react\";\nimport Link from \"next/link\";\n\nexport interface UserMenuItemProps {\n href: string;\n children: ReactNode;\n}\n\n/**\n * Styled menu item for use within UserMenuDropdown.\n * Provides consistent styling across all portal templates.\n */\nexport function UserMenuItem({ href, children }: UserMenuItemProps) {\n return (\n <Link\n href={href}\n className=\"block w-full px-4 py-2.5 text-sm text-gray-700 hover:bg-gray-50 transition-colors\"\n >\n {children}\n </Link>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/user-menu-dropdown.tsx","../src/components/user-menu-item.tsx"],"names":["jsxs","jsx","User","Link"],"mappings":";;;;;;;;;;;;;;;AAcO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,YAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,IAAA,GAAO;AACT,CAAA,EAA0B;AACxB,EAAA,MAAM,YAAA,GAAe,OACjB,6LAAA,GACA,4LAAA;AACJ,EAAA,MAAM,YAAA,GAAe,OACjB,kEAAA,GACA,kEAAA;AAEJ,EAAA,uBACEA,eAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAW,CAAA,eAAA,EAAkB,SAAS,CAAA,CAAA,EAC7C,QAAA,EAAA;AAAA,oBAAAA,eAAA,CAAC,SAAA,EAAA,EAAQ,WAAW,YAAA,EAClB,QAAA,EAAA;AAAA,sBAAAC,cAAA,CAACC,gBAAA,EAAA,EAAK,WAAU,SAAA,EAAU,CAAA;AAAA,sBAC1BD,cAAA,CAAC,UAAM,QAAA,EAAA,YAAA,EAAa,CAAA;AAAA,sBACpBA,cAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAM,4BAAA;AAAA,UACN,KAAA,EAAM,IAAA;AAAA,UACN,MAAA,EAAO,IAAA;AAAA,UACP,OAAA,EAAQ,WAAA;AAAA,UACR,IAAA,EAAK,MAAA;AAAA,UACL,MAAA,EAAO,cAAA;AAAA,UACP,WAAA,EAAY,GAAA;AAAA,UACZ,aAAA,EAAc,OAAA;AAAA,UACd,cAAA,EAAe,OAAA;AAAA,UACf,SAAA,EAAW,YAAA;AAAA,UAEX,QAAA,kBAAAA,cAAA,CAAC,UAAA,EAAA,EAAS,MAAA,EAAO,gBAAA,EAAiB;AAAA;AAAA;AACpC,KAAA,EACF,CAAA;AAAA,oBACAA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6FAAA,EACZ,QAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ;ACxCO,SAAS,YAAA,CAAa,EAAE,IAAA,EAAM,QAAA,EAAS,EAAsB;AAClE,EAAA,uBACEA,cAAAA;AAAA,IAACE,qBAAA;AAAA,IAAA;AAAA,MACC,IAAA;AAAA,MACA,SAAA,EAAU,mFAAA;AAAA,MAET;AAAA;AAAA,GACH;AAEJ","file":"user-menu-dropdown.js","sourcesContent":["import type { ReactNode } from \"react\";\nimport { User } from \"lucide-react\";\n\nexport interface UserMenuDropdownProps {\n displayLabel: string;\n children: ReactNode;\n className?: string;\n dark?: boolean;\n}\n\n/**\n * Reusable user menu dropdown component using HTML details element.\n * Works with TopNavMenuClose for click-away behavior.\n */\nexport function UserMenuDropdown({\n displayLabel,\n children,\n className = \"\",\n dark = false\n}: UserMenuDropdownProps) {\n const summaryClass = dark\n ? \"flex cursor-pointer items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium text-white/90 hover:bg-white/10 transition-colors list-none border border-transparent hover:border-white/20\"\n : \"flex cursor-pointer items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 transition-colors list-none border border-transparent hover:border-gray-200\";\n const chevronClass = dark\n ? \"h-4 w-4 text-white/50 transition-transform group-open:rotate-180\"\n : \"h-4 w-4 text-gray-500 transition-transform group-open:rotate-180\";\n\n return (\n <details className={`group relative ${className}`}>\n <summary className={summaryClass}>\n <User className=\"h-4 w-4\" />\n <span>{displayLabel}</span>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={chevronClass}\n >\n <polyline points=\"6 9 12 15 18 9\"></polyline>\n </svg>\n </summary>\n <div className=\"absolute right-0 mt-2 w-52 rounded-lg border border-gray-200 bg-white py-1.5 shadow-xl z-50\">\n {children}\n </div>\n </details>\n );\n}\n","import type { ReactNode } from \"react\";\nimport Link from \"next/link\";\n\nexport interface UserMenuItemProps {\n href: string;\n children: ReactNode;\n}\n\n/**\n * Styled menu item for use within UserMenuDropdown.\n * Provides consistent styling across all portal templates.\n */\nexport function UserMenuItem({ href, children }: UserMenuItemProps) {\n return (\n <Link\n href={href}\n className=\"block w-full px-4 py-2.5 text-sm text-gray-700 hover:bg-gray-50 transition-colors\"\n >\n {children}\n </Link>\n );\n}\n"]}
@@ -1,5 +1,5 @@
1
- export { a as BackgroundType, B as BrandingResult, d as decodeBranding, n as normalizeColor, s as sanitizeUrlForCss } from '../branding-DmsrDTNE.mjs';
2
- import { a1 as DownloadPortalRelease } from '../index-DaH1bSuO.mjs';
1
+ export { a as BackgroundType, B as BrandingResult, d as decodeBranding, i as isDarkColor, n as normalizeColor, s as sanitizeUrlForCss } from '../branding-C5H0L6Vi.mjs';
2
+ import { a1 as DownloadPortalRelease } from '../index-CITwEYtK.mjs';
3
3
  import { ReleaseEntry } from '../release-history-panel.mjs';
4
4
  export { U as UploadSupportBundleResult, u as uploadSupportBundleWithProgress } from '../upload-with-progress-D760HthX.mjs';
5
5
  import '../fetch-license-iTyF7_GY.mjs';
@@ -1,5 +1,5 @@
1
- export { a as BackgroundType, B as BrandingResult, d as decodeBranding, n as normalizeColor, s as sanitizeUrlForCss } from '../branding-DmsrDTNE.js';
2
- import { a1 as DownloadPortalRelease } from '../index-Bcp17Mf3.js';
1
+ export { a as BackgroundType, B as BrandingResult, d as decodeBranding, i as isDarkColor, n as normalizeColor, s as sanitizeUrlForCss } from '../branding-C5H0L6Vi.js';
2
+ import { a1 as DownloadPortalRelease } from '../index-7ibNULXY.js';
3
3
  import { ReleaseEntry } from '../release-history-panel.js';
4
4
  export { U as UploadSupportBundleResult, u as uploadSupportBundleWithProgress } from '../upload-with-progress-D760HthX.js';
5
5
  import '../fetch-license-iTyF7_GY.js';
@@ -132,6 +132,21 @@ var sanitizeUrlForCss = (url) => {
132
132
  const escaped = trimmed.replace(/\\/g, "\\\\").replace(/\)/g, "\\)").replace(/"/g, '\\"').replace(/'/g, "\\'").replace(/[\x00-\x1F\x7F]/g, "");
133
133
  return escaped;
134
134
  };
135
+ var isDarkColor = (hex) => {
136
+ if (!hex) return false;
137
+ const normalized = normalizeColor(hex);
138
+ if (!normalized) return false;
139
+ let h = normalized.replace("#", "");
140
+ if (h.length === 3) {
141
+ h = h.charAt(0) + h.charAt(0) + h.charAt(1) + h.charAt(1) + h.charAt(2) + h.charAt(2);
142
+ }
143
+ const r = parseInt(h.substring(0, 2), 16) / 255;
144
+ const g = parseInt(h.substring(2, 4), 16) / 255;
145
+ const b = parseInt(h.substring(4, 6), 16) / 255;
146
+ const toLinear = (c) => c <= 0.03928 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4;
147
+ const luminance = 0.2126 * toLinear(r) + 0.7152 * toLinear(g) + 0.0722 * toLinear(b);
148
+ return luminance < 0.5;
149
+ };
135
150
  var decodeBranding = ({ brandingData }) => {
136
151
  if (!brandingData || typeof brandingData !== "string") {
137
152
  return {
@@ -157,6 +172,13 @@ var decodeBranding = ({ brandingData }) => {
157
172
  const backgroundImage = sanitizeUrlForCss(parsed.backgroundImage);
158
173
  const backgroundGradientStart = normalizeColor(parsed.customColor1);
159
174
  const backgroundGradientEnd = normalizeColor(parsed.customColor2);
175
+ const headerColor = normalizeColor(parsed.headerColor);
176
+ const headerGradientEnd = normalizeColor(parsed.headerGradientEnd);
177
+ const sidebarColor = normalizeColor(parsed.sidebarColor);
178
+ const sidebarGradientEnd = normalizeColor(parsed.sidebarGradientEnd);
179
+ const contentBackgroundColor = normalizeColor(parsed.contentBackgroundColor);
180
+ const contentBackgroundGradientEnd = normalizeColor(parsed.contentBackgroundGradientEnd);
181
+ const customCSS = typeof parsed.customCSS === "string" ? parsed.customCSS : void 0;
160
182
  return {
161
183
  logo,
162
184
  title,
@@ -168,7 +190,14 @@ var decodeBranding = ({ brandingData }) => {
168
190
  background,
169
191
  backgroundImage,
170
192
  backgroundGradientStart,
171
- backgroundGradientEnd
193
+ backgroundGradientEnd,
194
+ headerColor,
195
+ headerGradientEnd,
196
+ sidebarColor,
197
+ sidebarGradientEnd,
198
+ contentBackgroundColor,
199
+ contentBackgroundGradientEnd,
200
+ customCSS
172
201
  };
173
202
  } catch (error) {
174
203
  console.debug("[portal-components] unable to parse branding JSON", error);
@@ -183,14 +212,17 @@ var decodeBranding = ({ brandingData }) => {
183
212
  var getApiOrigin = () => {
184
213
  return (process.env.REPLICATED_APP_ORIGIN || "https://replicated.app").replace(/\/+$/, "");
185
214
  };
186
- var fetchCustomBrandingImpl = async () => {
215
+ var fetchCustomBrandingImpl = async (version) => {
187
216
  const appSlug = process.env.PORTAL_APP_SLUG;
188
217
  if (!appSlug) {
189
218
  throw new Error("PORTAL_APP_SLUG is not configured");
190
219
  }
191
- const url = `${getApiOrigin()}/enterprise-portal/public/branding?app_slug=${encodeURIComponent(
220
+ let url = `${getApiOrigin()}/enterprise-portal/public/branding?app_slug=${encodeURIComponent(
192
221
  appSlug
193
222
  )}`;
223
+ if (version) {
224
+ url += `&version=${encodeURIComponent(version)}`;
225
+ }
194
226
  if (process.env.NODE_ENV !== "production") {
195
227
  console.debug(
196
228
  "[portal-components] fetching custom branding via %s (Enterprise Portal API)",
@@ -219,7 +251,14 @@ var fetchCustomBrandingImpl = async () => {
219
251
  background: payload.background,
220
252
  backgroundImage: payload.backgroundImage,
221
253
  customColor1: payload.customColor1,
222
- customColor2: payload.customColor2
254
+ customColor2: payload.customColor2,
255
+ headerColor: payload.headerColor,
256
+ headerGradientEnd: payload.headerGradientEnd,
257
+ sidebarColor: payload.sidebarColor,
258
+ sidebarGradientEnd: payload.sidebarGradientEnd,
259
+ contentBackgroundColor: payload.contentBackgroundColor,
260
+ contentBackgroundGradientEnd: payload.contentBackgroundGradientEnd,
261
+ customCSS: payload.customCSS
223
262
  };
224
263
  const brandingData = buffer.Buffer.from(JSON.stringify(brandingObject)).toString("base64");
225
264
  return {
@@ -454,6 +493,7 @@ exports.formatDate = formatDate;
454
493
  exports.formatDateShort = formatDateShort;
455
494
  exports.formatDateTime = formatDateTime;
456
495
  exports.formatDateTimeLocal = formatDateTimeLocal;
496
+ exports.isDarkColor = isDarkColor;
457
497
  exports.isHttpApiOrigin = isHttpApiOrigin;
458
498
  exports.isRedirectError = isRedirectError;
459
499
  exports.normalizeColor = normalizeColor;