@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,9 +1,8 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { j as FetchInstallOptionsResult } from './index-BAiVrSSR.mjs';
3
- import './actions/change-team.mjs';
2
+ import { L as License } from './fetch-license-iTyF7_GY.mjs';
4
3
 
5
4
  interface InstallCardProps {
6
- fetchInstallOptionsAction: () => Promise<FetchInstallOptionsResult>;
5
+ fetchInstallOptionsAction: () => Promise<License>;
7
6
  initialShowLinux?: boolean;
8
7
  initialShowHelm?: boolean;
9
8
  pollIntervalMs?: number;
@@ -1,9 +1,8 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { j as FetchInstallOptionsResult } from './index-DWt-N5od.js';
3
- import './actions/change-team.js';
2
+ import { L as License } from './fetch-license-iTyF7_GY.js';
4
3
 
5
4
  interface InstallCardProps {
6
- fetchInstallOptionsAction: () => Promise<FetchInstallOptionsResult>;
5
+ fetchInstallOptionsAction: () => Promise<License>;
7
6
  initialShowLinux?: boolean;
8
7
  initialShowHelm?: boolean;
9
8
  pollIntervalMs?: number;
@@ -14,6 +14,9 @@ var Link__default = /*#__PURE__*/_interopDefault(Link);
14
14
  * This file is generated by tsup. Do not edit manually.
15
15
  */
16
16
 
17
+
18
+ // src/utils/constants.ts
19
+ var DEFAULT_SECONDARY_COLOR = "#6366f1";
17
20
  var LinuxIcon = (props) => /* @__PURE__ */ jsxRuntime.jsx(
18
21
  "svg",
19
22
  {
@@ -49,7 +52,7 @@ var headingClass = "text-lg font-semibold text-gray-900";
49
52
  var contentClass = "mt-4 flex-1 space-y-3";
50
53
  var itemClass = "flex items-center gap-3 text-sm text-gray-600";
51
54
  var iconClass = "h-5 w-5 text-gray-500";
52
- var footerClass = "mt-6 flex justify-end text-sm font-semibold text-primary hover:text-primary/80";
55
+ var footerClass = "mt-6 flex justify-end text-sm font-semibold hover:opacity-80";
53
56
  var InstallCard = ({
54
57
  fetchInstallOptionsAction,
55
58
  initialShowLinux = true,
@@ -64,11 +67,11 @@ var InstallCard = ({
64
67
  return;
65
68
  }
66
69
  try {
67
- const result = await fetchInstallOptionsAction();
68
- setShowLinux(result.showLinux);
69
- setShowHelm(result.showHelm);
70
+ const license = await fetchInstallOptionsAction();
71
+ setShowLinux(license.isEmbeddedClusterDownloadEnabled || false);
72
+ setShowHelm(license.isHelmInstallEnabled || false);
70
73
  } catch (error) {
71
- console.error("[install-card] Failed to fetch install options", error);
74
+ console.error("[install-card] Failed to fetch license for install options", error);
72
75
  }
73
76
  };
74
77
  fetchOptions();
@@ -99,7 +102,7 @@ var InstallCard = ({
99
102
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Deploy via Helm" })
100
103
  ] }) : null
101
104
  ] }),
102
- /* @__PURE__ */ jsxRuntime.jsx("footer", { className: footerClass, children: /* @__PURE__ */ jsxRuntime.jsx(Link__default.default, { href: "/install", children: "View install guide \u2192" }) })
105
+ /* @__PURE__ */ jsxRuntime.jsx("footer", { className: footerClass, children: /* @__PURE__ */ jsxRuntime.jsx(Link__default.default, { href: "/install", style: { color: `var(--portal-branding-secondary, ${DEFAULT_SECONDARY_COLOR})` }, children: "View install guide \u2192" }) })
103
106
  ] });
104
107
  };
105
108
  InstallCard.displayName = "InstallCard";
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/install-card.tsx"],"names":["jsx","useState","useEffect","jsxs","Link"],"mappings":"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","file":"install-card.js","sourcesContent":["\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport type { SVGProps } from \"react\";\nimport Link from \"next/link\";\nimport type { FetchInstallOptionsResult } from \"../actions\";\n\nconst LinuxIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n <path d=\"M21.75 17.25v-.228a4.5 4.5 0 00-.12-1.03l-2.268-9.64a3.375 3.375 0 00-3.285-2.602H7.923a3.375 3.375 0 00-3.285 2.602l-2.268 9.64a4.5 4.5 0 00-.12 1.03v.228m19.5 0a3 3 0 01-3 3H5.25a3 3 0 01-3-3m19.5 0a3 3 0 00-3-3H5.25a3 3 0 00-3 3m16.5 0h.008v.008h-.008v-.008zm-3 0h.008v.008h-.008v-.008z\" />\n </svg>\n);\n\nconst HelmIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n <path d=\"M6.75 7.5l3 2.25-3 2.25m4.5 0h3m-9 8.25h13.5A2.25 2.25 0 0021 18V6a2.25 2.25 0 00-2.25-2.25H5.25A2.25 2.25 0 003 6v12a2.25 2.25 0 002.25 2.25z\" />\n </svg>\n);\n\nconst baseCardClass =\n \"flex h-full flex-col rounded-xl border border-gray-200 bg-white p-6 shadow-[0_16px_32px_rgba(15,23,42,0.05)]\";\nconst headingClass = \"text-lg font-semibold text-gray-900\";\nconst contentClass = \"mt-4 flex-1 space-y-3\";\nconst itemClass = \"flex items-center gap-3 text-sm text-gray-600\";\nconst iconClass = \"h-5 w-5 text-gray-500\";\nconst footerClass =\n \"mt-6 flex justify-end text-sm font-semibold text-primary hover:text-primary/80\";\n\nexport interface InstallCardProps {\n fetchInstallOptionsAction: () => Promise<FetchInstallOptionsResult>;\n initialShowLinux?: boolean;\n initialShowHelm?: boolean;\n pollIntervalMs?: number;\n}\n\nexport const InstallCard = ({ \n fetchInstallOptionsAction,\n initialShowLinux = true, \n initialShowHelm = true,\n pollIntervalMs = 2000\n}: InstallCardProps) => {\n const [showLinux, setShowLinux] = useState(initialShowLinux);\n const [showHelm, setShowHelm] = useState(initialShowHelm);\n\n useEffect(() => {\n const fetchOptions = async () => {\n // Skip if tab is not visible\n if (document.hidden) {\n return;\n }\n \n try {\n const result = await fetchInstallOptionsAction();\n setShowLinux(result.showLinux);\n setShowHelm(result.showHelm);\n } catch (error) {\n console.error(\"[install-card] Failed to fetch install options\", error);\n }\n };\n\n // Fetch immediately\n fetchOptions();\n\n // Set up polling interval\n const intervalId = setInterval(fetchOptions, pollIntervalMs);\n\n // Also fetch when tab becomes visible again\n const handleVisibilityChange = () => {\n if (!document.hidden) {\n fetchOptions();\n }\n };\n document.addEventListener('visibilitychange', handleVisibilityChange);\n\n // Cleanup on unmount\n return () => {\n clearInterval(intervalId);\n document.removeEventListener('visibilitychange', handleVisibilityChange);\n };\n }, [fetchInstallOptionsAction, pollIntervalMs]);\n\n // If neither option is enabled, don't render anything\n if (!showLinux && !showHelm) {\n return null;\n }\n\n return (\n <section className={baseCardClass} aria-labelledby=\"install-card-heading\">\n <header>\n <h2 id=\"install-card-heading\" className={headingClass}>\n Install\n </h2>\n </header>\n <div className={contentClass}>\n {showLinux ? (\n <div className={itemClass}>\n <LinuxIcon className={iconClass} />\n <span>Deploy to Linux</span>\n </div>\n ) : null}\n {showHelm ? (\n <div className={itemClass}>\n <HelmIcon className={iconClass} />\n <span>Deploy via Helm</span>\n </div>\n ) : null}\n </div>\n <footer className={footerClass}>\n <Link href=\"/install\">\n View install guide →\n </Link>\n </footer>\n </section>\n );\n};\n\nInstallCard.displayName = \"InstallCard\";\n"]}
1
+ {"version":3,"sources":["../src/utils/constants.ts","../src/components/install-card.tsx"],"names":["jsx","useState","useEffect","jsxs","Link"],"mappings":"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","file":"install-card.js","sourcesContent":["/**\n * Default globe favicon matching the CiGlobe icon (Circum Icons)\n * Used as fallback when custom branding doesn't provide a favicon\n */\nexport const DEFAULT_FAVICON = \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%239ca3af' stroke-width='1.5'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cellipse cx='12' cy='12' rx='4' ry='10'/%3E%3Cpath d='M2 12h20'/%3E%3C/svg%3E\";\n\n/**\n * Default primary brand color\n */\nexport const DEFAULT_PRIMARY_COLOR = \"#4f46e5\";\n\n/**\n * Default secondary brand color\n */\nexport const DEFAULT_SECONDARY_COLOR = \"#6366f1\";\n\n/**\n * Check if the API origin is HTTP (used for repldev environments)\n * This determines cookie security settings for cross-origin iframes\n * @returns true if the API origin starts with http:// (not https://)\n */\nexport const isHttpApiOrigin = (): boolean => {\n return process.env.REPLICATED_APP_ORIGIN?.startsWith('http://') || false;\n};\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport type { SVGProps } from \"react\";\nimport Link from \"next/link\";\nimport type { License } from \"../actions\";\nimport { DEFAULT_SECONDARY_COLOR } from \"../utils/constants\";\n\nconst LinuxIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n <path d=\"M21.75 17.25v-.228a4.5 4.5 0 00-.12-1.03l-2.268-9.64a3.375 3.375 0 00-3.285-2.602H7.923a3.375 3.375 0 00-3.285 2.602l-2.268 9.64a4.5 4.5 0 00-.12 1.03v.228m19.5 0a3 3 0 01-3 3H5.25a3 3 0 01-3-3m19.5 0a3 3 0 00-3-3H5.25a3 3 0 00-3 3m16.5 0h.008v.008h-.008v-.008zm-3 0h.008v.008h-.008v-.008z\" />\n </svg>\n);\n\nconst HelmIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n <path d=\"M6.75 7.5l3 2.25-3 2.25m4.5 0h3m-9 8.25h13.5A2.25 2.25 0 0021 18V6a2.25 2.25 0 00-2.25-2.25H5.25A2.25 2.25 0 003 6v12a2.25 2.25 0 002.25 2.25z\" />\n </svg>\n);\n\nconst baseCardClass =\n \"flex h-full flex-col rounded-xl border border-gray-200 bg-white p-6 shadow-[0_16px_32px_rgba(15,23,42,0.05)]\";\nconst headingClass = \"text-lg font-semibold text-gray-900\";\nconst contentClass = \"mt-4 flex-1 space-y-3\";\nconst itemClass = \"flex items-center gap-3 text-sm text-gray-600\";\nconst iconClass = \"h-5 w-5 text-gray-500\";\nconst footerClass =\n \"mt-6 flex justify-end text-sm font-semibold hover:opacity-80\";\n\nexport interface InstallCardProps {\n fetchInstallOptionsAction: () => Promise<License>;\n initialShowLinux?: boolean;\n initialShowHelm?: boolean;\n pollIntervalMs?: number;\n}\n\nexport const InstallCard = ({ \n fetchInstallOptionsAction,\n initialShowLinux = true, \n initialShowHelm = true,\n pollIntervalMs = 2000\n}: InstallCardProps) => {\n const [showLinux, setShowLinux] = useState(initialShowLinux);\n const [showHelm, setShowHelm] = useState(initialShowHelm);\n\n useEffect(() => {\n const fetchOptions = async () => {\n // Skip if tab is not visible\n if (document.hidden) {\n return;\n }\n \n try {\n const license = await fetchInstallOptionsAction();\n setShowLinux(license.isEmbeddedClusterDownloadEnabled || false);\n setShowHelm(license.isHelmInstallEnabled || false);\n } catch (error) {\n console.error(\"[install-card] Failed to fetch license for install options\", error);\n }\n };\n\n // Fetch immediately\n fetchOptions();\n\n // Set up polling interval\n const intervalId = setInterval(fetchOptions, pollIntervalMs);\n\n // Also fetch when tab becomes visible again\n const handleVisibilityChange = () => {\n if (!document.hidden) {\n fetchOptions();\n }\n };\n document.addEventListener('visibilitychange', handleVisibilityChange);\n\n // Cleanup on unmount\n return () => {\n clearInterval(intervalId);\n document.removeEventListener('visibilitychange', handleVisibilityChange);\n };\n }, [fetchInstallOptionsAction, pollIntervalMs]);\n\n // If neither option is enabled, don't render anything\n if (!showLinux && !showHelm) {\n return null;\n }\n\n return (\n <section className={baseCardClass} aria-labelledby=\"install-card-heading\">\n <header>\n <h2 id=\"install-card-heading\" className={headingClass}>\n Install\n </h2>\n </header>\n <div className={contentClass}>\n {showLinux ? (\n <div className={itemClass}>\n <LinuxIcon className={iconClass} />\n <span>Deploy to Linux</span>\n </div>\n ) : null}\n {showHelm ? (\n <div className={itemClass}>\n <HelmIcon className={iconClass} />\n <span>Deploy via Helm</span>\n </div>\n ) : null}\n </div>\n <footer className={footerClass}>\n <Link href=\"/install\" style={{ color: `var(--portal-branding-secondary, ${DEFAULT_SECONDARY_COLOR})` }}>\n View install guide →\n </Link>\n </footer>\n </section>\n );\n};\n\nInstallCard.displayName = \"InstallCard\";\n"]}
@@ -8,6 +8,9 @@ var jsxRuntime = require('react/jsx-runtime');
8
8
  * This file is generated by tsup. Do not edit manually.
9
9
  */
10
10
 
11
+
12
+ // src/utils/constants.ts
13
+ var DEFAULT_SECONDARY_COLOR = "#6366f1";
11
14
  var targetButtonBase = "flex w-full items-center justify-between rounded-2xl px-4 py-3 text-left text-sm font-medium transition";
12
15
  var InstallTargets = ({
13
16
  options,
@@ -33,10 +36,14 @@ var InstallTargets = ({
33
36
  {
34
37
  type: "button",
35
38
  onClick: () => handleSelect(option.id),
36
- className: `${targetButtonBase} ${isActive ? "bg-indigo-100 text-indigo-600" : "bg-white text-gray-600 hover:bg-gray-50"}`,
39
+ className: `${targetButtonBase} ${isActive ? "bg-white text-gray-600" : "bg-white text-gray-600 hover:bg-gray-50"}`,
40
+ style: isActive ? {
41
+ backgroundColor: `var(--portal-branding-primary-light, ${DEFAULT_SECONDARY_COLOR}20)`,
42
+ color: `var(--portal-branding-primary, ${DEFAULT_SECONDARY_COLOR})`
43
+ } : void 0,
37
44
  children: [
38
45
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: option.label }),
39
- isActive ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-indigo-500", children: "Selected" }) : option.description ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-gray-400", children: option.description }) : null
46
+ isActive ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs", style: { color: `var(--portal-branding-primary, ${DEFAULT_SECONDARY_COLOR})` }, children: "Selected" }) : option.description ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-gray-400", children: option.description }) : null
40
47
  ]
41
48
  },
42
49
  option.id
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/install-targets.tsx"],"names":["useState","jsx","jsxs"],"mappings":";;;;;;;;;;AAIA,IAAM,gBAAA,GACJ,yGAAA;AAeK,IAAM,iBAAiB,CAAC;AAAA,EAC7B,OAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,KAA2B;AACzB,EAAA,MAAM,CAAC,YAAY,aAAa,CAAA,GAAIA,eAAS,OAAA,CAAQ,CAAC,GAAG,EAAE,CAAA;AAE3D,EAAA,MAAM,aAAa,QAAA,IAAY,UAAA;AAE/B,EAAA,MAAM,YAAA,GAAe,CAAC,EAAA,KAAe;AACnC,IAAA,IAAI,CAAC,QAAQ,IAAA,CAAK,CAAC,WAAW,MAAA,CAAO,EAAA,KAAO,EAAE,CAAA,EAAG;AAC/C,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,aAAA,CAAc,EAAE,CAAA;AAAA,IAClB;AAEA,IAAA,QAAA,GAAW,EAAE,CAAA;AAAA,EACf,CAAA;AAEA,EAAA,uBACEC,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EACH,QAAA,kBAAAA,cAAA,CAAC,KAAA,EAAA,EAAI,WAAU,qBAAA,EACZ,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,KAAW;AACvB,IAAA,MAAM,QAAA,GAAW,OAAO,EAAA,KAAO,UAAA;AAC/B,IAAA,uBACEC,eAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QAEC,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS,MAAM,YAAA,CAAa,MAAA,CAAO,EAAE,CAAA;AAAA,QACrC,WAAW,CAAA,EAAG,gBAAgB,CAAA,CAAA,EAC5B,QAAA,GACI,kCACA,yCACN,CAAA,CAAA;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAD,cAAA,CAAC,MAAA,EAAA,EAAM,iBAAO,KAAA,EAAM,CAAA;AAAA,UACnB,QAAA,mBACCA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2BAA0B,QAAA,EAAA,UAAA,EAAQ,CAAA,GAChD,MAAA,CAAO,WAAA,kCACR,MAAA,EAAA,EAAK,SAAA,EAAU,uBAAA,EAAyB,QAAA,EAAA,MAAA,CAAO,aAAY,CAAA,GAC1D;AAAA;AAAA,OAAA;AAAA,MAdC,MAAA,CAAO;AAAA,KAed;AAAA,EAEJ,CAAC,GACH,CAAA,EACF,CAAA;AAEJ;AAEA,cAAA,CAAe,WAAA,GAAc,gBAAA","file":"install-targets.js","sourcesContent":["\"use client\";\n\nimport { useState } from \"react\";\n\nconst targetButtonBase =\n \"flex w-full items-center justify-between rounded-2xl px-4 py-3 text-left text-sm font-medium transition\";\n\nexport interface InstallTargetOption {\n id: string;\n label: string;\n description?: string;\n}\n\nexport interface InstallTargetsProps {\n options: InstallTargetOption[];\n activeId?: string;\n onChange?: (targetId: string) => void;\n className?: string;\n}\n\nexport const InstallTargets = ({\n options,\n activeId,\n onChange,\n className\n}: InstallTargetsProps) => {\n const [internalId, setInternalId] = useState(options[0]?.id);\n\n const selectedId = activeId ?? internalId;\n\n const handleSelect = (id: string) => {\n if (!options.find((option) => option.id === id)) {\n return;\n }\n\n if (!activeId) {\n setInternalId(id);\n }\n\n onChange?.(id);\n };\n\n return (\n <div className={className}>\n <div className=\"flex flex-col gap-2\">\n {options.map((option) => {\n const isActive = option.id === selectedId;\n return (\n <button\n key={option.id}\n type=\"button\"\n onClick={() => handleSelect(option.id)}\n className={`${targetButtonBase} ${\n isActive\n ? \"bg-indigo-100 text-indigo-600\"\n : \"bg-white text-gray-600 hover:bg-gray-50\"\n }`}\n >\n <span>{option.label}</span>\n {isActive ? (\n <span className=\"text-xs text-indigo-500\">Selected</span>\n ) : option.description ? (\n <span className=\"text-xs text-gray-400\">{option.description}</span>\n ) : null}\n </button>\n );\n })}\n </div>\n </div>\n );\n};\n\nInstallTargets.displayName = \"InstallTargets\";\n"]}
1
+ {"version":3,"sources":["../src/utils/constants.ts","../src/components/install-targets.tsx"],"names":["useState","jsx","jsxs"],"mappings":";;;;;;;;;;;;AAcO,IAAM,uBAAA,GAA0B,SAAA;ACTvC,IAAM,gBAAA,GACJ,yGAAA;AAeK,IAAM,iBAAiB,CAAC;AAAA,EAC7B,OAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,KAA2B;AACzB,EAAA,MAAM,CAAC,YAAY,aAAa,CAAA,GAAIA,eAAS,OAAA,CAAQ,CAAC,GAAG,EAAE,CAAA;AAE3D,EAAA,MAAM,aAAa,QAAA,IAAY,UAAA;AAE/B,EAAA,MAAM,YAAA,GAAe,CAAC,EAAA,KAAe;AACnC,IAAA,IAAI,CAAC,QAAQ,IAAA,CAAK,CAAC,WAAW,MAAA,CAAO,EAAA,KAAO,EAAE,CAAA,EAAG;AAC/C,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,aAAA,CAAc,EAAE,CAAA;AAAA,IAClB;AAEA,IAAA,QAAA,GAAW,EAAE,CAAA;AAAA,EACf,CAAA;AAEA,EAAA,uBACEC,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EACH,QAAA,kBAAAA,cAAA,CAAC,KAAA,EAAA,EAAI,WAAU,qBAAA,EACZ,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,KAAW;AACvB,IAAA,MAAM,QAAA,GAAW,OAAO,EAAA,KAAO,UAAA;AAC/B,IAAA,uBACEC,eAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QAEC,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS,MAAM,YAAA,CAAa,MAAA,CAAO,EAAE,CAAA;AAAA,QACrC,WAAW,CAAA,EAAG,gBAAgB,CAAA,CAAA,EAC5B,QAAA,GACI,2BACA,yCACN,CAAA,CAAA;AAAA,QACA,OAAO,QAAA,GAAW;AAAA,UAChB,eAAA,EAAiB,wCAAwC,uBAAuB,CAAA,GAAA,CAAA;AAAA,UAChF,KAAA,EAAO,kCAAkC,uBAAuB,CAAA,CAAA;AAAA,SAClE,GAAI,MAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAAD,cAAA,CAAC,MAAA,EAAA,EAAM,iBAAO,KAAA,EAAM,CAAA;AAAA,UACnB,QAAA,kCACE,MAAA,EAAA,EAAK,SAAA,EAAU,WAAU,KAAA,EAAO,EAAE,KAAA,EAAO,CAAA,+BAAA,EAAkC,uBAAuB,CAAA,CAAA,CAAA,IAAO,QAAA,EAAA,UAAA,EAAQ,CAAA,GAChH,OAAO,WAAA,mBACTA,cAAA,CAAC,UAAK,SAAA,EAAU,uBAAA,EAAyB,QAAA,EAAA,MAAA,CAAO,WAAA,EAAY,CAAA,GAC1D;AAAA;AAAA,OAAA;AAAA,MAlBC,MAAA,CAAO;AAAA,KAmBd;AAAA,EAEJ,CAAC,GACH,CAAA,EACF,CAAA;AAEJ;AAEA,cAAA,CAAe,WAAA,GAAc,gBAAA","file":"install-targets.js","sourcesContent":["/**\n * Default globe favicon matching the CiGlobe icon (Circum Icons)\n * Used as fallback when custom branding doesn't provide a favicon\n */\nexport const DEFAULT_FAVICON = \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%239ca3af' stroke-width='1.5'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cellipse cx='12' cy='12' rx='4' ry='10'/%3E%3Cpath d='M2 12h20'/%3E%3C/svg%3E\";\n\n/**\n * Default primary brand color\n */\nexport const DEFAULT_PRIMARY_COLOR = \"#4f46e5\";\n\n/**\n * Default secondary brand color\n */\nexport const DEFAULT_SECONDARY_COLOR = \"#6366f1\";\n\n/**\n * Check if the API origin is HTTP (used for repldev environments)\n * This determines cookie security settings for cross-origin iframes\n * @returns true if the API origin starts with http:// (not https://)\n */\nexport const isHttpApiOrigin = (): boolean => {\n return process.env.REPLICATED_APP_ORIGIN?.startsWith('http://') || false;\n};\n","\"use client\";\n\nimport { useState } from \"react\";\nimport { DEFAULT_SECONDARY_COLOR } from \"../utils/constants\";\n\nconst targetButtonBase =\n \"flex w-full items-center justify-between rounded-2xl px-4 py-3 text-left text-sm font-medium transition\";\n\nexport interface InstallTargetOption {\n id: string;\n label: string;\n description?: string;\n}\n\nexport interface InstallTargetsProps {\n options: InstallTargetOption[];\n activeId?: string;\n onChange?: (targetId: string) => void;\n className?: string;\n}\n\nexport const InstallTargets = ({\n options,\n activeId,\n onChange,\n className\n}: InstallTargetsProps) => {\n const [internalId, setInternalId] = useState(options[0]?.id);\n\n const selectedId = activeId ?? internalId;\n\n const handleSelect = (id: string) => {\n if (!options.find((option) => option.id === id)) {\n return;\n }\n\n if (!activeId) {\n setInternalId(id);\n }\n\n onChange?.(id);\n };\n\n return (\n <div className={className}>\n <div className=\"flex flex-col gap-2\">\n {options.map((option) => {\n const isActive = option.id === selectedId;\n return (\n <button\n key={option.id}\n type=\"button\"\n onClick={() => handleSelect(option.id)}\n className={`${targetButtonBase} ${\n isActive\n ? \"bg-white text-gray-600\"\n : \"bg-white text-gray-600 hover:bg-gray-50\"\n }`}\n style={isActive ? {\n backgroundColor: `var(--portal-branding-primary-light, ${DEFAULT_SECONDARY_COLOR}20)`,\n color: `var(--portal-branding-primary, ${DEFAULT_SECONDARY_COLOR})`\n } : undefined}\n >\n <span>{option.label}</span>\n {isActive ? (\n <span className=\"text-xs\" style={{ color: `var(--portal-branding-primary, ${DEFAULT_SECONDARY_COLOR})` }}>Selected</span>\n ) : option.description ? (\n <span className=\"text-xs text-gray-400\">{option.description}</span>\n ) : null}\n </button>\n );\n })}\n </div>\n </div>\n );\n};\n\nInstallTargets.displayName = \"InstallTargets\";\n"]}
@@ -1,7 +1,9 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { Instance } from './install-actions.mjs';
3
- import { C as ChannelRelease, I as InstallOptions, S as SecurityReleaseImage, G as GetSecurityInfoDiffResult } from './index-BAiVrSSR.mjs';
3
+ import { C as ChannelRelease, I as InstallOptions, S as SecurityReleaseImage, G as GetSecurityInfoDiffResult } 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
  interface InstanceCardProps {
7
9
  instance: Instance;
@@ -1,7 +1,9 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { Instance } from './install-actions.js';
3
- import { C as ChannelRelease, I as InstallOptions, S as SecurityReleaseImage, G as GetSecurityInfoDiffResult } from './index-DWt-N5od.js';
3
+ import { C as ChannelRelease, I as InstallOptions, S as SecurityReleaseImage, G as GetSecurityInfoDiffResult } 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
  interface InstanceCardProps {
7
9
  instance: Instance;
@@ -3,100 +3,43 @@
3
3
 
4
4
  var react = require('react');
5
5
  var Link = require('next/link');
6
+ var cx = require('classnames');
6
7
  var jsxRuntime = require('react/jsx-runtime');
7
8
 
8
9
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
9
10
 
10
11
  var Link__default = /*#__PURE__*/_interopDefault(Link);
12
+ var cx__default = /*#__PURE__*/_interopDefault(cx);
11
13
 
12
14
  /**
13
15
  * Enterprise Portal Components
14
16
  * This file is generated by tsup. Do not edit manually.
15
17
  */
16
- var __create = Object.create;
17
- var __defProp = Object.defineProperty;
18
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
19
- var __getOwnPropNames = Object.getOwnPropertyNames;
20
- var __getProtoOf = Object.getPrototypeOf;
21
- var __hasOwnProp = Object.prototype.hasOwnProperty;
22
- var __commonJS = (cb, mod) => function __require() {
23
- return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
24
- };
25
- var __copyProps = (to, from, except, desc) => {
26
- if (from && typeof from === "object" || typeof from === "function") {
27
- for (let key of __getOwnPropNames(from))
28
- if (!__hasOwnProp.call(to, key) && key !== except)
29
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
30
- }
31
- return to;
32
- };
33
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
34
- // If the importer is in node compatibility mode or this is not an ESM
35
- // file that has been converted to a CommonJS file using a Babel-
36
- // compatible transform (i.e. "__esModule" has not been set), then set
37
- // "default" to the CommonJS "module.exports" for node compatibility.
38
- !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
39
- mod
40
- ));
41
18
 
42
- // node_modules/classnames/index.js
43
- var require_classnames = __commonJS({
44
- "node_modules/classnames/index.js"(exports$1, module) {
45
- (function() {
46
- var hasOwn = {}.hasOwnProperty;
47
- function classNames() {
48
- var classes = "";
49
- for (var i = 0; i < arguments.length; i++) {
50
- var arg = arguments[i];
51
- if (arg) {
52
- classes = appendClass(classes, parseValue(arg));
53
- }
54
- }
55
- return classes;
56
- }
57
- function parseValue(arg) {
58
- if (typeof arg === "string" || typeof arg === "number") {
59
- return arg;
60
- }
61
- if (typeof arg !== "object") {
62
- return "";
63
- }
64
- if (Array.isArray(arg)) {
65
- return classNames.apply(null, arg);
66
- }
67
- if (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes("[native code]")) {
68
- return arg.toString();
69
- }
70
- var classes = "";
71
- for (var key in arg) {
72
- if (hasOwn.call(arg, key) && arg[key]) {
73
- classes = appendClass(classes, key);
74
- }
75
- }
76
- return classes;
77
- }
78
- function appendClass(value, newClass) {
79
- if (!newClass) {
80
- return value;
81
- }
82
- if (value) {
83
- return value + " " + newClass;
84
- }
85
- return value + newClass;
86
- }
87
- if (typeof module !== "undefined" && module.exports) {
88
- classNames.default = classNames;
89
- module.exports = classNames;
90
- } else if (typeof define === "function" && typeof define.amd === "object" && define.amd) {
91
- define("classnames", [], function() {
92
- return classNames;
93
- });
94
- } else {
95
- window.classNames = classNames;
96
- }
97
- })();
19
+
20
+ // src/utils/constants.ts
21
+ var DEFAULT_SECONDARY_COLOR = "#6366f1";
22
+
23
+ // src/utils/format.ts
24
+ function formatDateTimeLocal(dateString) {
25
+ if (!dateString) return "N/A";
26
+ try {
27
+ const date = new Date(dateString);
28
+ if (isNaN(date.getTime())) {
29
+ return dateString;
30
+ }
31
+ return date.toLocaleDateString("en-US", {
32
+ month: "numeric",
33
+ day: "numeric",
34
+ year: "numeric",
35
+ hour: "numeric",
36
+ minute: "2-digit",
37
+ hour12: true
38
+ });
39
+ } catch {
40
+ return "N/A";
98
41
  }
99
- });
42
+ }
100
43
  function getInstallType(instance, installOptions) {
101
44
  const instanceHasNoInstallTypes = !instance.kotsInstallId && !instance.kurlInstallId && !instance.embeddedClusterId;
102
45
  const isManuallyCreatedAirgapInstance = instance.isAirgap && instanceHasNoInstallTypes;
@@ -140,9 +83,6 @@ function getInstanceName(instance) {
140
83
  const nameTag = instance.tags?.find((tag) => tag.key === "name");
141
84
  return nameTag?.value || instance.id.slice(0, 7);
142
85
  }
143
-
144
- // src/components/app-status-badge.tsx
145
- var import_classnames = __toESM(require_classnames());
146
86
  var toTitle = (value) => {
147
87
  const s = value.trim();
148
88
  if (!s) return s;
@@ -266,7 +206,7 @@ function AppStatusBadge({
266
206
  return /* @__PURE__ */ jsxRuntime.jsxs(
267
207
  "span",
268
208
  {
269
- className: (0, import_classnames.default)(
209
+ className: cx__default.default(
270
210
  "inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium",
271
211
  getClassNameForType(type),
272
212
  className
@@ -278,18 +218,6 @@ function AppStatusBadge({
278
218
  }
279
219
  );
280
220
  }
281
- function formatDateTime(dateString) {
282
- if (!dateString) return "N/A";
283
- const date = new Date(dateString);
284
- return date.toLocaleDateString("en-US", {
285
- month: "numeric",
286
- day: "numeric",
287
- year: "numeric",
288
- hour: "numeric",
289
- minute: "2-digit",
290
- hour12: true
291
- });
292
- }
293
221
  function UpdateBadge({ count }) {
294
222
  if (count <= 0) return null;
295
223
  return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-1.5 inline-flex h-5 w-5 items-center justify-center rounded-full bg-rose-500 text-xs font-medium text-white", children: count });
@@ -327,7 +255,7 @@ function InstanceCard({
327
255
  channelReleases = [],
328
256
  installOptions = [],
329
257
  onUpdateClick,
330
- primaryColor = "#6366f1",
258
+ primaryColor = DEFAULT_SECONDARY_COLOR,
331
259
  securityData = {},
332
260
  securityDiffData = {},
333
261
  securityEnabled = false
@@ -427,18 +355,28 @@ function InstanceCard({
427
355
  instance.versionLabel || "Unknown",
428
356
  /* @__PURE__ */ jsxRuntime.jsx(UpdateBadge, { count: availableUpdates })
429
357
  ] }),
430
- instance.isAirgap && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "rounded-full bg-indigo-100 px-2 py-0.5 text-xs font-medium text-indigo-700", children: "air gap" }),
358
+ instance.isAirgap && /* @__PURE__ */ jsxRuntime.jsx(
359
+ "span",
360
+ {
361
+ className: "rounded-full px-2 py-0.5 text-xs font-medium",
362
+ style: {
363
+ backgroundColor: `var(--portal-branding-primary-light, ${DEFAULT_SECONDARY_COLOR}20)`,
364
+ color: `var(--portal-branding-primary, ${DEFAULT_SECONDARY_COLOR})`
365
+ },
366
+ children: "air gap"
367
+ }
368
+ ),
431
369
  installType && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "rounded-full bg-gray-100 px-2 py-0.5 text-xs font-medium text-gray-600", children: installType }),
432
370
  (instance.appStatus || instance.resourceStates && instance.resourceStates.length > 0) && /* @__PURE__ */ jsxRuntime.jsx(AppStatusBadge, { status: statusForBadge })
433
371
  ] }),
434
372
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap gap-4", children: [
435
373
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1", children: [
436
374
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-gray-500", children: "First check-in:" }),
437
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-gray-600", children: formatDateTime(instance.firstCheckin) })
375
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-gray-600", children: formatDateTimeLocal(instance.firstCheckin) })
438
376
  ] }),
439
377
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1", children: [
440
378
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-gray-500", children: "Last check-in:" }),
441
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-gray-600", children: formatDateTime(instance.lastCheckin) })
379
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-gray-600", children: formatDateTimeLocal(instance.lastCheckin) })
442
380
  ] })
443
381
  ] }),
444
382
  securityEnabled && hasSecurityInfo && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
@@ -480,15 +418,6 @@ function InstanceCard({
480
418
  ] }) });
481
419
  }
482
420
  InstanceCard.displayName = "InstanceCard";
483
- /*! Bundled license information:
484
-
485
- classnames/index.js:
486
- (*!
487
- Copyright (c) 2018 Jed Watson.
488
- Licensed under the MIT License (MIT), see
489
- http://jedwatson.github.io/classnames
490
- *)
491
- */
492
421
 
493
422
  exports.InstanceCard = InstanceCard;
494
423
  //# sourceMappingURL=instance-card.js.map