@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
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/format.ts","../src/utils/constants.ts","../src/utils/clipboard.ts","../src/components/service-accounts-tab.tsx"],"names":["useState","useCallback","useRef","useMemo","jsxs","jsx","Fragment","MoreVertical","X","Key","Check","Copy","AlertTriangle","RotateCcw"],"mappings":"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","file":"service-accounts-tab.js","sourcesContent":["/**\n * Format bytes to human-readable string\n * @param bytes - Number of bytes\n * @param decimals - Number of decimal places (default: 1)\n * @returns Formatted string (e.g., \"1.5 MB\")\n */\nexport function formatBytes(bytes: number, decimals = 1): string {\n if (bytes === 0) return \"0 Bytes\";\n\n const k = 1024;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\", \"TB\"];\n\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`;\n}\n\n/**\n * Format date string to short numeric date (no time)\n * @param dateString - ISO date string or null/undefined\n * @returns Formatted string (e.g., \"01/27/2026\") or \"Never\" if no date\n */\nexport function formatDateShort(dateString?: string | null): string {\n if (!dateString) return \"Never\";\n const date = new Date(dateString);\n if (isNaN(date.getTime())) {\n return dateString;\n }\n return date.toLocaleDateString(\"en-US\", {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\"\n });\n}\n\n/**\n * Format date string to human-readable local timestamp\n * @param dateString - ISO date string or null/undefined\n * @returns Formatted string (e.g., \"Jan 27, 2026, 10:32 PM\") or \"Never\" if no date\n */\nexport function formatDate(dateString?: string | null): string {\n if (!dateString) return \"Never\";\n const date = new Date(dateString);\n if (isNaN(date.getTime())) {\n return dateString;\n }\n return date.toLocaleDateString(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n hour: \"numeric\",\n minute: \"2-digit\",\n hour12: true\n });\n}\n\n/**\n * Format date string to human-readable UTC timestamp\n * @param dateString - ISO date string\n * @returns Formatted string (e.g., \"01/27/2026, 22:32:39 UTC\")\n */\nexport function formatDateTime(dateString: string): string {\n const date = new Date(dateString);\n if (isNaN(date.getTime())) {\n return dateString;\n }\n return date.toLocaleString(\"en-US\", {\n timeZone: \"UTC\",\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: false\n }) + \" UTC\";\n}\n\n/**\n * Format date string to user-friendly local timestamp with 12-hour time\n * @param dateString - ISO date string or null/undefined\n * @returns Formatted string (e.g., \"1/27/2026, 10:32 PM\") or \"N/A\" if not provided\n */\nexport function formatDateTimeLocal(dateString?: string | null): string {\n if (!dateString) return \"N/A\";\n\n try {\n const date = new Date(dateString);\n if (isNaN(date.getTime())) {\n return dateString;\n }\n return date.toLocaleDateString(\"en-US\", {\n month: \"numeric\",\n day: \"numeric\",\n year: \"numeric\",\n hour: \"numeric\",\n minute: \"2-digit\",\n hour12: true\n });\n } catch {\n return \"N/A\";\n }\n}\n","/**\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, useCallback } from \"react\";\n\n/**\n * Hook for copy-to-clipboard functionality with visual feedback\n * @param resetDelay - Time in milliseconds before resetting copied state (default: 2000)\n * @returns Object with copy function and copied state\n */\nexport function useCopyToClipboard(resetDelay = 2000) {\n const [copied, setCopied] = useState(false);\n\n const copy = useCallback(async (text: string): Promise<boolean> => {\n if (!navigator.clipboard) {\n console.warn(\"[useCopyToClipboard] Clipboard API not available\");\n return false;\n }\n\n try {\n await navigator.clipboard.writeText(text);\n setCopied(true);\n setTimeout(() => setCopied(false), resetDelay);\n return true;\n } catch (error) {\n console.error(\"[useCopyToClipboard] Failed to copy:\", error);\n return false;\n }\n }, [resetDelay]);\n\n return { copy, copied };\n}\n\n/**\n * Simple utility function to copy text to clipboard\n * @param text - Text to copy\n * @returns Promise that resolves to true if successful, false otherwise\n */\nexport async function copyToClipboard(text: string): Promise<boolean> {\n if (!navigator.clipboard) {\n console.warn(\"[copyToClipboard] Clipboard API not available\");\n return false;\n }\n\n try {\n await navigator.clipboard.writeText(text);\n return true;\n } catch (error) {\n console.error(\"[copyToClipboard] Failed to copy:\", error);\n return false;\n }\n}\n","\"use client\";\n\nimport { useState, useMemo, useRef } from \"react\";\nimport { MoreVertical, X, Key, AlertTriangle, RotateCcw, Copy, Check } from \"lucide-react\";\nimport { formatDate } from \"../utils/format\";\nimport { DEFAULT_PRIMARY_COLOR, DEFAULT_SECONDARY_COLOR } from \"../utils/constants\";\nimport { useCopyToClipboard, copyToClipboard } from \"../utils/clipboard\";\n\n// Types for service accounts and instances\nexport interface ServiceAccount {\n id: string;\n accountName: string;\n token: string;\n isRevoked: boolean;\n createdAt: string;\n lastUsedAt?: string | null;\n emailAddress?: string | null;\n tokenRegeneratedAt?: string | null;\n}\n\nexport interface Instance {\n id: string;\n serviceAccountId?: string;\n versionLabel?: string | null;\n lastCheckin?: string | null;\n embeddedClusterVersion?: string | null;\n tags?: Array<{ key: string; value: string }> | null;\n}\n\n// Server action types\nexport interface ServiceAccountActions {\n fetchServiceAccounts: (size: number, offset: number, includeRevoked: boolean) => Promise<{\n serviceAccounts: ServiceAccount[];\n total: number;\n }>;\n createServiceAccount: (name: string) => Promise<{ token: string }>;\n revokeServiceAccount: (accountId: string) => Promise<{ success: boolean }>;\n rotateServiceAccountToken: (accountId: string) => Promise<{\n serviceAccount: ServiceAccount;\n helmLoginCommand: string;\n redeployHelm: string[];\n }>;\n}\n\nexport interface ServiceAccountsTabProps {\n initialServiceAccounts: ServiceAccount[];\n initialTotal: number;\n initialInstances: Instance[];\n primaryColor?: string;\n secondaryColor?: string;\n actions: ServiceAccountActions;\n}\n\ninterface ServiceAccountWithInstances extends ServiceAccount {\n instanceCount: number;\n}\n\nexport function ServiceAccountsTab({\n initialServiceAccounts,\n initialTotal,\n initialInstances,\n primaryColor,\n secondaryColor,\n actions,\n}: ServiceAccountsTabProps) {\n const [serviceAccounts, setServiceAccounts] = useState(initialServiceAccounts);\n const [total, setTotal] = useState(initialTotal);\n const [instances] = useState(initialInstances);\n const [error, setError] = useState<string | null>(null);\n\n // Pagination state\n const [pageIndex, setPageIndex] = useState(0);\n const [pageSize, setPageSize] = useState(25);\n const [showRevoked, setShowRevoked] = useState(false);\n\n // Modal states\n const [isCreateModalOpen, setIsCreateModalOpen] = useState(false);\n const [isTokenModalOpen, setIsTokenModalOpen] = useState(false);\n const [isRevokeModalOpen, setIsRevokeModalOpen] = useState(false);\n const [isRotateModalOpen, setIsRotateModalOpen] = useState(false);\n const [isRotatedTokenModalOpen, setIsRotatedTokenModalOpen] = useState(false);\n const [isInstancesModalOpen, setIsInstancesModalOpen] = useState(false);\n\n // Selected items\n const [selectedAccount, setSelectedAccount] = useState<ServiceAccountWithInstances | null>(null);\n const [newToken, setNewToken] = useState<string>(\"\");\n const [rotatedAccount, setRotatedAccount] = useState<ServiceAccount | null>(null);\n const [helmLoginCommand, setHelmLoginCommand] = useState(\"\");\n const [redeployHelm, setRedeployHelm] = useState<string[]>([]);\n\n // Dropdown state\n const [openDropdown, setOpenDropdown] = useState<string | null>(null);\n const [dropdownPosition, setDropdownPosition] = useState<{ top: number; right: number } | null>(null);\n const dropdownRefs = useRef<{ [key: string]: HTMLButtonElement | null }>({});\n\n const handleOpenDropdown = (accountId: string) => {\n const button = dropdownRefs.current[accountId];\n if (button) {\n const rect = button.getBoundingClientRect();\n setDropdownPosition({\n top: rect.bottom + 8,\n right: window.innerWidth - rect.right\n });\n setOpenDropdown(accountId);\n }\n };\n\n const handleCloseDropdown = () => {\n setOpenDropdown(null);\n setDropdownPosition(null);\n };\n\n // Compute instance counts\n const serviceAccountsWithInstances = useMemo(() => {\n return serviceAccounts.map((account) => ({\n ...account,\n instanceCount: instances.filter((i) => i.serviceAccountId === account.id).length\n }));\n }, [serviceAccounts, instances]);\n\n // Background refresh without showing loading spinner\n const refreshData = async (size = pageSize, offset = pageIndex * pageSize, includeRevoked = showRevoked) => {\n setError(null);\n try {\n const result = await actions.fetchServiceAccounts(size, offset, includeRevoked);\n setServiceAccounts(result.serviceAccounts);\n setTotal(result.total);\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Failed to fetch service accounts\");\n }\n };\n\n const handlePageChange = (newPageIndex: number) => {\n setPageIndex(newPageIndex);\n refreshData(pageSize, newPageIndex * pageSize, showRevoked);\n };\n\n const handlePageSizeChange = (newPageSize: number) => {\n setPageSize(newPageSize);\n setPageIndex(0);\n refreshData(newPageSize, 0, showRevoked);\n };\n\n const handleShowRevokedChange = (value: boolean) => {\n setShowRevoked(value);\n setPageIndex(0);\n refreshData(pageSize, 0, value);\n };\n\n const isRecentlyRotated = (dateString?: string | null) => {\n if (!dateString) return false;\n const date = new Date(dateString);\n const now = new Date();\n const hoursDiff = (now.getTime() - date.getTime()) / (1000 * 60 * 60);\n return hoursDiff < 24;\n };\n\n const getInstancesForAccount = (accountId: string) => {\n return instances.filter((i) => i.serviceAccountId === accountId);\n };\n\n return (\n <div className=\"space-y-6\">\n <div className=\"flex justify-between items-center\">\n <p className=\"text-gray-600\">Service Accounts can call all APIs associated with the Enterprise Portal</p>\n <div className=\"flex items-center gap-4\">\n <div className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n id=\"showRevokedCheckbox\"\n checked={showRevoked}\n onChange={(e) => handleShowRevokedChange(e.target.checked)}\n className=\"portal-checkbox cursor-pointer\"\n />\n <label htmlFor=\"showRevokedCheckbox\" className=\"text-sm text-gray-700 cursor-pointer\">\n Show revoked accounts\n </label>\n </div>\n <button\n onClick={() => setIsCreateModalOpen(true)}\n className=\"px-4 py-2 text-white rounded-md font-medium text-sm transition-opacity duration-200 hover:opacity-90\"\n style={{ backgroundColor: primaryColor || DEFAULT_PRIMARY_COLOR }}\n >\n Create Service Account\n </button>\n </div>\n </div>\n\n {serviceAccountsWithInstances.length === 0 ? (\n <p className=\"rounded-2xl border border-dashed border-gray-200 bg-gray-50 px-6 py-10 text-center text-sm text-gray-500\">\n No service accounts have been created yet.\n </p>\n ) : (\n <div className=\"bg-white shadow-sm rounded-lg w-full overflow-x-auto\">\n <table className=\"divide-y divide-gray-200 w-full table-fixed min-w-[900px]\">\n <thead className=\"bg-gray-50\">\n <tr>\n <th scope=\"col\" className=\"w-[13%] px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider\">Nickname</th>\n <th scope=\"col\" className=\"w-[9%] px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider\">Last Accessed</th>\n <th scope=\"col\" className=\"w-[9%] px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider\">Created</th>\n <th scope=\"col\" className=\"w-[16%] px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider\">Created By</th>\n <th scope=\"col\" className=\"w-[9%] px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider\">Last Rotated</th>\n <th scope=\"col\" className=\"w-[8%] px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider\">Instances</th>\n <th scope=\"col\" className=\"w-[6%] px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider\">Token</th>\n <th scope=\"col\" className=\"w-[6%] px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider\">Status</th>\n <th scope=\"col\" className=\"w-[6%] px-4 py-3 text-center text-xs font-medium text-gray-500 uppercase tracking-wider\">Actions</th>\n </tr>\n </thead>\n <tbody className=\"bg-white divide-y divide-gray-200\">\n {serviceAccountsWithInstances.map((account) => (\n <tr key={account.id}>\n <td className=\"px-4 py-4 text-sm text-gray-900 truncate\" title={account.accountName}>{account.accountName}</td>\n <td className=\"px-4 py-4 text-sm text-gray-500\">{formatDate(account.lastUsedAt)}</td>\n <td className=\"px-4 py-4 text-sm text-gray-500\">{formatDate(account.createdAt)}</td>\n <td className=\"px-4 py-4 text-sm text-gray-500 truncate\" title={account.emailAddress || undefined}>{account.emailAddress || \"—\"}</td>\n <td className=\"px-4 py-4 text-sm text-gray-500\">\n <div className=\"flex flex-col\">\n <div>{formatDate(account.tokenRegeneratedAt)}</div>\n {isRecentlyRotated(account.tokenRegeneratedAt) && (\n <div className=\"text-xs text-blue-600\">Recently rotated</div>\n )}\n </div>\n </td>\n <td className=\"px-4 py-4 whitespace-nowrap text-sm\">\n {account.instanceCount > 0 ? (\n <button\n onClick={() => {\n setSelectedAccount(account);\n setIsInstancesModalOpen(true);\n }}\n className=\"text-blue-500 hover:underline cursor-pointer bg-transparent border-0 p-0\"\n >\n {account.instanceCount} active\n </button>\n ) : (\n <span className=\"text-gray-500\">0 active</span>\n )}\n </td>\n <td className=\"px-4 py-4 whitespace-nowrap text-sm\">\n {!account.isRevoked ? (\n <button\n onClick={() => {\n setSelectedAccount(account);\n setNewToken(\"\");\n setIsTokenModalOpen(true);\n }}\n className=\"hover:underline cursor-pointer bg-transparent border-0 p-0\"\n style={{ color: secondaryColor || DEFAULT_SECONDARY_COLOR }}\n >\n View\n </button>\n ) : (\n <span className=\"text-gray-500 cursor-not-allowed\">View</span>\n )}\n </td>\n <td className=\"px-4 py-4 whitespace-nowrap text-sm\">\n {account.isRevoked ? (\n <span className=\"text-red-500\">Revoked</span>\n ) : (\n <span className=\"text-green-500\">Active</span>\n )}\n </td>\n <td className=\"px-4 py-4 whitespace-nowrap text-center text-sm font-medium\">\n {!account.isRevoked && (\n <>\n <button\n ref={(el) => { dropdownRefs.current[account.id] = el; }}\n onClick={() => openDropdown === account.id ? handleCloseDropdown() : handleOpenDropdown(account.id)}\n className=\"bg-transparent border-0 p-0 cursor-pointer\"\n >\n <MoreVertical className=\"w-5 h-5 text-gray-500\" />\n </button>\n {openDropdown === account.id && dropdownPosition && (\n <>\n <div className=\"fixed inset-0 z-10\" onClick={handleCloseDropdown} />\n <div\n className=\"fixed z-20 w-48 rounded-md shadow-lg bg-white ring-1 ring-black ring-opacity-5\"\n style={{ top: `${dropdownPosition.top}px`, right: `${dropdownPosition.right}px` }}\n >\n <div className=\"py-1\">\n {account.instanceCount > 0 && (\n <>\n <button\n onClick={() => {\n setSelectedAccount(account);\n setIsInstancesModalOpen(true);\n handleCloseDropdown();\n }}\n className=\"w-full text-left px-4 py-2 text-sm text-gray-700 hover:bg-gray-100\"\n >\n View instances\n </button>\n <div className=\"border-t border-gray-100\" />\n </>\n )}\n <button\n onClick={() => {\n setSelectedAccount(account);\n setIsRotateModalOpen(true);\n handleCloseDropdown();\n }}\n className=\"w-full text-left px-4 py-2 text-sm text-gray-700 hover:bg-gray-100\"\n >\n Rotate token\n </button>\n <div className=\"border-t border-gray-100\" />\n <button\n onClick={() => {\n setSelectedAccount(account);\n setIsRevokeModalOpen(true);\n handleCloseDropdown();\n }}\n className=\"w-full text-left px-4 py-2 text-sm text-red-600 hover:bg-gray-100\"\n >\n Revoke\n </button>\n </div>\n </div>\n </>\n )}\n </>\n )}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )}\n\n {/* Pagination */}\n {total > 0 && (\n <div className=\"px-6 py-3 bg-gray-50 border-t border-gray-200 rounded-b-lg\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-4\">\n <span className=\"text-sm text-gray-700\">\n Showing <span className=\"font-medium\">{pageIndex * pageSize + 1}</span> to{\" \"}\n <span className=\"font-medium\">{Math.min((pageIndex + 1) * pageSize, total)}</span>{\" \"}\n of <span className=\"font-medium\">{total}</span> results\n </span>\n <select\n value={pageSize}\n onChange={(e) => handlePageSizeChange(Number(e.target.value))}\n className=\"portal-select text-sm\"\n >\n <option value={25}>25 per page</option>\n <option value={50}>50 per page</option>\n <option value={100}>100 per page</option>\n </select>\n </div>\n <div className=\"flex items-center\" style={{ gap: \"8px\" }}>\n <button\n onClick={() => handlePageChange(Math.max(0, pageIndex - 1))}\n disabled={pageIndex === 0}\n className=\"px-3 py-1 text-white rounded-md font-medium text-sm transition-opacity duration-200 hover:opacity-90 disabled:opacity-50\"\n style={{ backgroundColor: primaryColor || DEFAULT_PRIMARY_COLOR }}\n >\n Previous\n </button>\n <button\n onClick={() => handlePageChange(pageIndex + 1)}\n disabled={(pageIndex + 1) * pageSize >= total}\n className=\"px-3 py-1 text-white rounded-md font-medium text-sm transition-opacity duration-200 hover:opacity-90 disabled:opacity-50\"\n style={{ backgroundColor: primaryColor || DEFAULT_PRIMARY_COLOR }}\n >\n Next\n </button>\n </div>\n </div>\n </div>\n )}\n\n {error && (\n <div className=\"bg-red-50 border border-red-200 rounded-md p-4\">\n <div className=\"flex\">\n <X className=\"h-5 w-5 text-red-400\" />\n <div className=\"ml-3\">\n <h3 className=\"text-sm font-medium text-red-800\">Error</h3>\n <div className=\"mt-2 text-sm text-red-700\">{error}</div>\n </div>\n </div>\n </div>\n )}\n\n {/* Create Service Account Modal */}\n <CreateServiceAccountModal\n isOpen={isCreateModalOpen}\n onClose={() => setIsCreateModalOpen(false)}\n onSuccess={(token) => {\n setNewToken(token);\n setIsCreateModalOpen(false);\n setIsTokenModalOpen(true);\n refreshData();\n }}\n primaryColor={primaryColor}\n createServiceAccount={actions.createServiceAccount}\n />\n\n {/* Token Modal */}\n <ServiceAccountTokenModal\n isOpen={isTokenModalOpen}\n onClose={() => {\n setIsTokenModalOpen(false);\n setSelectedAccount(null);\n setNewToken(\"\");\n }}\n token={newToken || selectedAccount?.token || \"\"}\n accountName={selectedAccount?.accountName}\n isNewToken={!!newToken}\n />\n\n {/* Instances Modal */}\n {selectedAccount && (\n <ServiceAccountInstancesModal\n isOpen={isInstancesModalOpen}\n onClose={() => {\n setIsInstancesModalOpen(false);\n setSelectedAccount(null);\n }}\n accountName={selectedAccount.accountName}\n instances={getInstancesForAccount(selectedAccount.id)}\n />\n )}\n\n {/* Revoke Modal */}\n {selectedAccount && (\n <RevokeServiceAccountModal\n isOpen={isRevokeModalOpen}\n onClose={() => {\n setIsRevokeModalOpen(false);\n setSelectedAccount(null);\n }}\n onSuccess={() => {\n setIsRevokeModalOpen(false);\n setSelectedAccount(null);\n refreshData();\n }}\n accountId={selectedAccount.id}\n accountName={selectedAccount.accountName}\n primaryColor={primaryColor}\n revokeServiceAccount={actions.revokeServiceAccount}\n />\n )}\n\n {/* Rotate Modal */}\n {selectedAccount && (\n <RotateServiceAccountModal\n isOpen={isRotateModalOpen}\n onClose={() => {\n setIsRotateModalOpen(false);\n setSelectedAccount(null);\n }}\n onSuccess={(result) => {\n setIsRotateModalOpen(false);\n setRotatedAccount(result.serviceAccount);\n setHelmLoginCommand(result.helmLoginCommand);\n setRedeployHelm(result.redeployHelm);\n setSelectedAccount(null);\n setIsRotatedTokenModalOpen(true);\n refreshData();\n }}\n account={selectedAccount}\n instances={getInstancesForAccount(selectedAccount.id)}\n primaryColor={primaryColor}\n rotateServiceAccountToken={actions.rotateServiceAccountToken}\n />\n )}\n\n {/* Rotated Token Modal */}\n {rotatedAccount && (\n <RotatedTokenModal\n isOpen={isRotatedTokenModalOpen}\n onClose={() => {\n setIsRotatedTokenModalOpen(false);\n setRotatedAccount(null);\n setHelmLoginCommand(\"\");\n setRedeployHelm([]);\n }}\n serviceAccount={rotatedAccount}\n helmLoginCommand={helmLoginCommand}\n redeployHelm={redeployHelm}\n instances={instances.filter((i) => i.serviceAccountId === rotatedAccount.id)}\n primaryColor={primaryColor}\n />\n )}\n </div>\n );\n}\n\n// Modal components\nfunction CreateServiceAccountModal({\n isOpen,\n onClose,\n onSuccess,\n primaryColor,\n createServiceAccount\n}: {\n isOpen: boolean;\n onClose: () => void;\n onSuccess: (token: string) => void;\n primaryColor?: string;\n createServiceAccount: (name: string) => Promise<{ token: string }>;\n}) {\n const [name, setName] = useState(\"\");\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n if (!isOpen) return null;\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n setIsSubmitting(true);\n setError(null);\n\n try {\n const result = await createServiceAccount(name);\n setName(\"\");\n onSuccess(result.token);\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Failed to create service account\");\n } finally {\n setIsSubmitting(false);\n }\n };\n\n const handleClose = () => {\n setName(\"\");\n setError(null);\n onClose();\n };\n\n return (\n <div className=\"fixed inset-0 z-50 overflow-y-auto\">\n <div className=\"flex min-h-screen items-center justify-center p-4\">\n <div className=\"fixed inset-0 bg-gray-500 bg-opacity-75\" onClick={handleClose} />\n <div className=\"relative bg-white rounded-lg shadow-xl w-full max-w-md\">\n <div className=\"flex justify-between items-center p-6\">\n <h2 className=\"text-xl font-semibold text-gray-900\">Create a Service Account</h2>\n <button onClick={handleClose} className=\"text-gray-400 hover:text-gray-500 border-none bg-transparent\">\n <X className=\"h-5 w-5\" />\n </button>\n </div>\n <form onSubmit={handleSubmit} className=\"px-6 pb-6\">\n <p className=\"text-gray-600 mb-4\">Create a service account with a descriptive nickname to identify its purpose.</p>\n {error && <div className=\"text-red-500 text-sm font-semibold mb-4\">Error: {error}</div>}\n <div className=\"relative mb-5\">\n <Key className=\"absolute w-5 h-5 text-gray-400 pointer-events-none\" style={{ left: \"12px\", top: \"50%\", transform: \"translateY(-50%)\" }} />\n <input type=\"text\" value={name} onChange={(e) => setName(e.target.value)} className=\"portal-input w-full pr-4 py-2.5\" style={{ paddingLeft: \"44px\" }} placeholder=\"Nickname\" required />\n </div>\n <div className=\"flex justify-end space-x-3 mt-6\">\n <button type=\"button\" onClick={handleClose} className=\"px-4 py-2 text-sm font-medium text-gray-700 bg-gray-100 hover:bg-gray-200 rounded-md\">Cancel</button>\n <button type=\"submit\" disabled={isSubmitting} className=\"px-4 py-2 text-sm font-medium text-white rounded-md transition-opacity duration-200 hover:opacity-90 disabled:opacity-50\" style={{ backgroundColor: primaryColor || DEFAULT_PRIMARY_COLOR }}>{isSubmitting ? \"Creating...\" : \"Create Service Account\"}</button>\n </div>\n </form>\n </div>\n </div>\n </div>\n );\n}\n\nfunction ServiceAccountTokenModal({ isOpen, onClose, token, accountName, isNewToken }: { isOpen: boolean; onClose: () => void; token: string; accountName?: string; isNewToken?: boolean; }) {\n const { copy, copied } = useCopyToClipboard();\n if (!isOpen) return null;\n const title = isNewToken ? \"Service Account Created\" : `${accountName} Token`;\n const handleCopy = () => copy(token);\n return (\n <div className=\"fixed inset-0 z-50 overflow-y-auto\">\n <div className=\"flex min-h-screen items-center justify-center p-4\">\n <div className=\"fixed inset-0 bg-gray-500 bg-opacity-75\" onClick={onClose} />\n <div className=\"relative bg-white rounded-lg shadow-xl w-full max-w-2xl\">\n <div className=\"flex justify-between items-center p-6\"><h2 className=\"text-xl font-semibold text-gray-900\">{title}</h2><button onClick={onClose} className=\"text-gray-400 hover:text-gray-500 border-none bg-transparent\"><X className=\"h-5 w-5\" /></button></div>\n <div className=\"px-6 pb-6 flex flex-col gap-4\">\n <p className=\"text-gray-600 mb-0\">This is your token, keep it in a secure location.</p>\n <div>\n <pre className=\"bg-gray-900 text-gray-100 p-4 rounded-lg whitespace-pre-wrap break-all\"><code>{token}</code></pre>\n </div>\n <div className=\"flex justify-end gap-3\">\n <button onClick={handleCopy} className=\"px-4 py-2 text-sm font-medium text-gray-700 bg-gray-100 hover:bg-gray-200 rounded-md inline-flex items-center gap-2\">\n {copied ? <><Check className=\"w-4 h-4 text-green-600\" /> Copied</> : <><Copy className=\"w-4 h-4\" /> Copy token</>}\n </button>\n <button onClick={onClose} className=\"px-4 py-2 text-sm font-medium text-gray-700 bg-gray-100 hover:bg-gray-200 rounded-md\">Close</button>\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction ServiceAccountInstancesModal({ isOpen, onClose, accountName, instances }: { isOpen: boolean; onClose: () => void; accountName: string; instances: Instance[]; }) {\n if (!isOpen) return null;\n const isInstanceActive = (instance: Instance) => { const day = 24 * 60 * 60 * 1000; const lastCheckin = instance.lastCheckin ? new Date(instance.lastCheckin).getTime() : 0; return lastCheckin > Date.now() - day; };\n const getInstanceName = (instance: Instance) => { const nameTag = instance.tags?.find((t) => t.key === \"name\"); return nameTag?.value || instance.id; };\n const getInstanceTags = (instance: Instance) => instance.tags?.filter((t) => t.key !== \"name\") || [];\n return (\n <div className=\"fixed inset-0 z-50 overflow-y-auto\">\n <div className=\"flex min-h-screen items-center justify-center p-4\">\n <div className=\"fixed inset-0 bg-gray-500 bg-opacity-75\" onClick={onClose} />\n <div className=\"relative bg-white rounded-lg shadow-xl w-full max-w-2xl\">\n <div className=\"flex justify-between items-center p-6\"><h2 className=\"text-xl font-semibold text-gray-900\">Instances controlled by {accountName}</h2><button onClick={onClose} className=\"text-gray-400 hover:text-gray-500 border-none bg-transparent\"><X className=\"h-5 w-5\" /></button></div>\n <div className=\"px-6 pb-6\">\n {instances.length === 0 ? <p className=\"text-gray-500\">No instances found for {accountName}</p> : (\n <div className=\"flex flex-col gap-4\">{instances.map((instance) => {\n const tags = getInstanceTags(instance);\n return (\n <div key={instance.id} className=\"h-[72px] pl-6 pr-3 rounded-lg border border-gray-200 flex items-center\">\n <div className=\"flex items-center\">\n <div className={`h-2.5 w-2.5 rounded-full mr-6 flex-shrink-0 ${isInstanceActive(instance) ? \"bg-green-500\" : \"bg-yellow-500\"}`} />\n <div>\n <div className=\"font-medium text-gray-900 mb-1\">{getInstanceName(instance)}</div>\n <div className=\"text-sm text-gray-500\">Version {instance.versionLabel || \"Unknown\"}</div>\n </div>\n {tags.length > 0 && (\n <div className=\"flex flex-wrap gap-1.5 ml-6\">\n {tags.map((tag) => (\n <span key={tag.key} className=\"inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-gray-100 text-gray-700\">\n {tag.key}={tag.value}\n </span>\n ))}\n </div>\n )}\n </div>\n </div>\n );\n })}</div>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction RevokeServiceAccountModal({ isOpen, onClose, onSuccess, accountId, accountName, primaryColor, revokeServiceAccount }: { isOpen: boolean; onClose: () => void; onSuccess: () => void; accountId: string; accountName: string; primaryColor?: string; revokeServiceAccount: (accountId: string) => Promise<{ success: boolean }>; }) {\n const [confirmName, setConfirmName] = useState(\"\");\n const [isRevoking, setIsRevoking] = useState(false);\n const [error, setError] = useState<string | null>(null);\n if (!isOpen) return null;\n const handleRevoke = async () => { setIsRevoking(true); setError(null); try { await revokeServiceAccount(accountId); setConfirmName(\"\"); onSuccess(); } catch (err) { setError(err instanceof Error ? err.message : \"Failed to revoke service account\"); } finally { setIsRevoking(false); } };\n const handleClose = () => { setConfirmName(\"\"); setError(null); onClose(); };\n return (\n <div className=\"fixed inset-0 z-50 overflow-y-auto\">\n <div className=\"flex min-h-screen items-center justify-center p-4\">\n <div className=\"fixed inset-0 bg-gray-500 bg-opacity-75\" onClick={handleClose} />\n <div className=\"relative bg-white rounded-lg shadow-xl w-full max-w-md\">\n <div className=\"flex justify-between items-center p-6\"><h2 className=\"text-xl font-semibold text-gray-900\">Revoke service account</h2><button onClick={handleClose} className=\"text-gray-400 hover:text-gray-500 border-none bg-transparent\"><X className=\"h-5 w-5\" /></button></div>\n <div className=\"px-6 pb-6\">\n <p className=\"text-gray-600 mb-4\">Are you sure you want to revoke this service account? This action cannot be undone.</p>\n <p className=\"text-gray-600 mb-4\">To confirm, please type the service account name: <span className=\"font-semibold\">{accountName}</span></p>\n <input type=\"text\" value={confirmName} onChange={(e) => setConfirmName(e.target.value)} placeholder=\"Enter service account name\" className=\"portal-input w-full mb-4\" />\n {error && <div className=\"text-red-500 text-sm font-semibold mb-4\">Error: {error}</div>}\n <div className=\"flex justify-end space-x-3\"><button onClick={handleClose} disabled={isRevoking} className=\"px-4 py-2 text-sm font-medium text-gray-700 bg-gray-100 hover:bg-gray-200 rounded-md border border-gray-300\">Cancel</button><button onClick={handleRevoke} disabled={confirmName !== accountName || isRevoking} className=\"px-4 py-2 text-sm font-medium text-white rounded-md transition-opacity duration-200 hover:opacity-90 disabled:opacity-50\" style={{ backgroundColor: primaryColor || DEFAULT_PRIMARY_COLOR }}>{isRevoking ? \"Revoking...\" : \"Revoke service account\"}</button></div>\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction RotateServiceAccountModal({ isOpen, onClose, onSuccess, account, instances, primaryColor, rotateServiceAccountToken }: { isOpen: boolean; onClose: () => void; onSuccess: (result: { serviceAccount: ServiceAccount; helmLoginCommand: string; redeployHelm: string[] }) => void; account: ServiceAccountWithInstances; instances: Instance[]; primaryColor?: string; rotateServiceAccountToken: (accountId: string) => Promise<{ serviceAccount: ServiceAccount; helmLoginCommand: string; redeployHelm: string[] }>; }) {\n const [confirmRotate, setConfirmRotate] = useState(false);\n const [confirmText, setConfirmText] = useState(\"\");\n const [isRotating, setIsRotating] = useState(false);\n const [error, setError] = useState<string | null>(null);\n if (!isOpen) return null;\n const requiredConfirmText = \"Abandon instances and proceed anyways\";\n const hasOldECInstances = instances.some((i) => { const v = i.embeddedClusterVersion; if (!v) return false; const m = v.match(/^v?(\\d+)\\.(\\d+)\\.(\\d+)/); if (!m || m.length < 4) return false; const major = Number(m[1]); const minor = Number(m[2]); const patch = Number(m[3]); return major < 2 || (major === 2 && minor < 7) || (major === 2 && minor === 7 && patch < 4); });\n const handleRotate = async () => { setIsRotating(true); setError(null); try { const result = await rotateServiceAccountToken(account.id); onSuccess(result); } catch (err) { setError(err instanceof Error ? err.message : \"Failed to rotate token\"); } finally { setIsRotating(false); } };\n const handleClose = () => { setConfirmRotate(false); setConfirmText(\"\"); onClose(); };\n return (\n <div className=\"fixed inset-0 z-50 overflow-y-auto\">\n <div className=\"flex min-h-screen items-center justify-center p-4\">\n <div className=\"fixed inset-0 bg-gray-500 bg-opacity-75\" onClick={handleClose} />\n <div className=\"relative bg-white rounded-lg shadow-xl w-full max-w-lg\">\n <div className=\"flex justify-between items-center p-6\"><h2 className=\"text-xl font-semibold text-gray-900\">Rotate Service Account Token</h2><button onClick={handleClose} className=\"text-gray-400 hover:text-gray-500 border-none bg-transparent\"><X className=\"h-5 w-5\" /></button></div>\n <div className=\"px-6 pb-6\">\n <div className=\"flex items-start gap-3 mb-4\"><AlertTriangle className=\"w-5 h-5 text-yellow-500 flex-shrink-0 mt-0.5\" /><div><p className=\"text-gray-900 font-medium mb-2\">This will invalidate the current token</p><p className=\"text-gray-600 mb-0\">Rotating the token for <span className=\"font-semibold\">{account.accountName}</span> will immediately invalidate the existing token. Any systems using the current token will need to be updated with the new token.</p></div></div>\n {account.instanceCount > 0 && <div className=\"bg-amber-50 border border-amber-200 rounded-md p-3 mb-4\"><p className=\"text-amber-800 text-sm mb-0\"><strong>Warning:</strong> This service account is being used by {account.instanceCount} active instance{account.instanceCount > 1 ? \"s\" : \"\"}. Make sure to update those instances with the new token.</p></div>}\n {hasOldECInstances && <div className=\"bg-red-50 border border-red-200 rounded-md p-3 mb-4\"><p className=\"text-red-800 text-sm mb-3\"><strong>Warning:</strong> Some instances are running Embedded Cluster versions older than 2.7.4. There is no way to rotate service accounts for these instances without first updating. If rotated, these instances can no longer be updated.</p><div className=\"mt-3\"><label className=\"block text-sm font-medium text-red-800 mb-2\">Type the following to continue:</label><p className=\"text-xs text-red-700 mb-2 italic\">&quot;{requiredConfirmText}&quot;</p><input type=\"text\" value={confirmText} onChange={(e) => setConfirmText(e.target.value)} placeholder=\"Type the text above exactly as shown\" className=\"portal-input w-full\" /></div></div>}\n <div className=\"flex items-center gap-2 mb-4\"><input type=\"checkbox\" id=\"confirmRotateCheckbox\" checked={confirmRotate} onChange={(e) => setConfirmRotate(e.target.checked)} className=\"portal-checkbox\" /><label htmlFor=\"confirmRotateCheckbox\" className=\"text-sm text-gray-700 mb-0\">I understand that the current token will be invalidated</label></div>\n {error && <div className=\"text-red-500 text-sm font-semibold mb-4\">Error: {error}</div>}\n <div className=\"flex justify-end space-x-3\"><button onClick={handleClose} disabled={isRotating} className=\"px-4 py-2 text-sm font-medium text-gray-700 bg-gray-100 hover:bg-gray-200 rounded-md border border-gray-300\">Cancel</button><button onClick={handleRotate} disabled={!confirmRotate || isRotating || (hasOldECInstances && confirmText !== requiredConfirmText)} className=\"px-4 py-2 text-sm font-medium text-white rounded-md transition-opacity duration-200 hover:opacity-90 disabled:opacity-50\" style={{ backgroundColor: primaryColor || DEFAULT_PRIMARY_COLOR }}>{isRotating ? \"Rotating...\" : \"Rotate token\"}</button></div>\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction RotatedTokenModal({ isOpen, onClose, serviceAccount, helmLoginCommand, redeployHelm, instances, primaryColor }: { isOpen: boolean; onClose: () => void; serviceAccount: ServiceAccount; helmLoginCommand: string; redeployHelm: string[]; instances: Instance[]; primaryColor?: string; }) {\n const [copiedField, setCopiedField] = useState<string | null>(null);\n if (!isOpen) return null;\n const handleCopy = async (text: string, field: string) => {\n const success = await copyToClipboard(text);\n if (success) {\n setCopiedField(field);\n setTimeout(() => setCopiedField(null), 2000);\n }\n };\n const hasECInstances = instances.some((i) => !!i.embeddedClusterVersion);\n return (\n <div className=\"fixed inset-0 z-50 overflow-y-auto\">\n <div className=\"flex min-h-screen items-center justify-center p-4\">\n <div className=\"fixed inset-0 bg-gray-500 bg-opacity-75\" onClick={onClose} />\n <div className=\"relative bg-white rounded-lg shadow-xl w-full max-w-2xl max-h-[90vh] overflow-y-auto\">\n <div className=\"flex justify-between items-center p-6\"><h2 className=\"text-xl font-semibold text-gray-900\">Token Rotated Successfully</h2><button onClick={onClose} className=\"text-gray-400 hover:text-gray-500 border-none bg-transparent\"><X className=\"h-5 w-5\" /></button></div>\n <div className=\"px-6 pb-6 flex flex-col gap-4\">\n <div className=\"bg-green-50 border border-green-200 rounded-md p-3\"><div className=\"flex items-start gap-2\"><RotateCcw className=\"w-4 h-4 text-black mt-0.5 flex-shrink-0\" /><div><p className=\"text-black font-medium text-sm mb-1\">Token rotated for {serviceAccount.accountName}</p><p className=\"text-black text-sm mb-0\">The previous token has been invalidated. Use this new token for authentication.</p></div></div></div>\n <div><div className=\"flex items-center justify-between mb-2\"><label className=\"text-sm font-medium text-gray-700\">New Service Account Token</label></div><div className=\"relative group\"><pre className=\"bg-gray-900 text-gray-100 p-4 rounded-lg overflow-x-auto cursor-pointer\" onClick={() => handleCopy(serviceAccount.token, \"token\")}><code>{serviceAccount.token}</code></pre><button onClick={() => handleCopy(serviceAccount.token, \"token\")} className=\"absolute top-2 right-2 p-2 text-gray-400 hover:text-gray-200 bg-transparent border-0\">{copiedField === \"token\" ? <Check className=\"w-4 h-4 text-green-400\" /> : <Copy className=\"w-4 h-4\" />}</button></div><p className=\"text-xs text-gray-500 mt-1\">Keep this token secure and update any systems that were using the previous token.</p></div>\n {hasECInstances && <div className=\"bg-green-50 border border-green-200 rounded-md p-3\"><div className=\"flex items-start gap-2\"><div className=\"w-4 h-4 bg-green-500 rounded-full mt-0.5 flex-shrink-0\" /><div><p className=\"text-black font-medium text-sm mb-1\">Update Embedded Cluster Instances</p><p className=\"text-black text-sm mb-0\">For instances running Embedded Cluster, upload the new service account token via the instance admin console&apos;s License tab to ensure continued access.</p></div></div></div>}\n {helmLoginCommand && <div><div className=\"flex items-center justify-between mb-2\"><label className=\"text-sm font-medium text-gray-700\">Helm Registry Login Command</label></div><div className=\"relative group\"><pre className=\"bg-gray-900 text-gray-100 p-4 rounded-lg overflow-x-auto cursor-pointer\" onClick={() => handleCopy(helmLoginCommand, \"helm\")}><code>{helmLoginCommand}</code></pre><button onClick={() => handleCopy(helmLoginCommand, \"helm\")} className=\"absolute top-2 right-2 p-2 text-gray-400 hover:text-gray-200 bg-transparent border-0\">{copiedField === \"helm\" ? <Check className=\"w-4 h-4 text-green-400\" /> : <Copy className=\"w-4 h-4\" />}</button></div><p className=\"text-xs text-gray-500 mt-1\">Use this command to authenticate with the registry using your new token.</p></div>}\n {redeployHelm.length > 0 && <div><label className=\"text-sm font-medium text-gray-700 mb-2 block\">Redeploy Commands</label>{redeployHelm.length > 1 && <div className=\"bg-yellow-50 border border-yellow-200 rounded-md p-3 mb-3\"><p className=\"text-xs text-yellow-700 mb-2\">Since you have multiple instances, you may want to check which Helm charts are currently deployed on each instance to ensure you do not accidentally change chart versions:</p><pre className=\"bg-gray-900 text-gray-100 p-2 rounded text-sm\"><code>helm list</code></pre></div>}<div className=\"space-y-3\">{redeployHelm.map((commands, index) => <div key={index}><div className=\"flex items-center justify-between mb-2\"><span className=\"text-xs font-medium text-gray-600\">Instance {index + 1}</span></div><div className=\"relative group\"><pre className=\"bg-gray-900 text-gray-100 p-4 rounded-lg overflow-x-auto cursor-pointer\" onClick={() => handleCopy(commands, `redeploy-${index}`)}><code>{commands}</code></pre><button onClick={() => handleCopy(commands, `redeploy-${index}`)} className=\"absolute top-2 right-2 p-2 text-gray-400 hover:text-gray-200 bg-transparent border-0\">{copiedField === `redeploy-${index}` ? <Check className=\"w-4 h-4 text-green-400\" /> : <Copy className=\"w-4 h-4\" />}</button></div><p className=\"text-xs text-gray-500 mt-1\">Use this command to redeploy your Helm charts with the new service account token.</p></div>)}</div></div>}\n <div className=\"flex justify-end mt-4\"><button onClick={onClose} className=\"px-4 py-2 text-white rounded-md font-medium transition-opacity duration-200 hover:opacity-90\" style={{ backgroundColor: primaryColor || DEFAULT_PRIMARY_COLOR }}>Done</button></div>\n </div>\n </div>\n </div>\n </div>\n );\n}\n"]}