@replicated/portal-components 0.0.1 → 0.0.3

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 (216) hide show
  1. package/components/metadata/registry.json +109 -3
  2. package/components/metadata/registry.md +53 -3
  3. package/dist/actions/index.d.mts +590 -2
  4. package/dist/actions/index.d.ts +590 -2
  5. package/dist/actions/index.js +1931 -0
  6. package/dist/actions/index.js.map +1 -1
  7. package/dist/airgap-instances.d.mts +26 -0
  8. package/dist/airgap-instances.d.ts +26 -0
  9. package/dist/airgap-instances.js +354 -0
  10. package/dist/airgap-instances.js.map +1 -0
  11. package/dist/error-page.d.mts +14 -0
  12. package/dist/error-page.d.ts +14 -0
  13. package/dist/error-page.js +153 -0
  14. package/dist/error-page.js.map +1 -0
  15. package/dist/error.d.mts +15 -0
  16. package/dist/error.d.ts +15 -0
  17. package/dist/error.js +144 -0
  18. package/dist/error.js.map +1 -0
  19. package/dist/esm/actions/index.js +1892 -1
  20. package/dist/esm/actions/index.js.map +1 -1
  21. package/dist/esm/airgap-instances.js +352 -0
  22. package/dist/esm/airgap-instances.js.map +1 -0
  23. package/dist/esm/error-page.js +151 -0
  24. package/dist/esm/error-page.js.map +1 -0
  25. package/dist/esm/error.js +142 -0
  26. package/dist/esm/error.js.map +1 -0
  27. package/dist/esm/helm-install-wizard.js +1007 -0
  28. package/dist/esm/helm-install-wizard.js.map +1 -0
  29. package/dist/esm/index.js +2240 -82
  30. package/dist/esm/index.js.map +1 -1
  31. package/dist/esm/install-actions.js +746 -0
  32. package/dist/esm/install-actions.js.map +1 -0
  33. package/dist/esm/install-card.js +115 -0
  34. package/dist/esm/install-card.js.map +1 -0
  35. package/dist/esm/install-targets.js +48 -0
  36. package/dist/esm/install-targets.js.map +1 -0
  37. package/dist/esm/instance-card.js +197 -0
  38. package/dist/esm/instance-card.js.map +1 -0
  39. package/dist/esm/join-team.js +218 -0
  40. package/dist/esm/join-team.js.map +1 -0
  41. package/dist/esm/license-card.js +131 -0
  42. package/dist/esm/license-card.js.map +1 -0
  43. package/dist/esm/license-details.js +667 -0
  44. package/dist/esm/license-details.js.map +1 -0
  45. package/dist/esm/linux-install-wizard.js +1083 -0
  46. package/dist/esm/linux-install-wizard.js.map +1 -0
  47. package/dist/esm/login.js +261 -0
  48. package/dist/esm/login.js.map +1 -0
  49. package/dist/esm/online-instance-list.js +287 -0
  50. package/dist/esm/online-instance-list.js.map +1 -0
  51. package/dist/esm/pending-installations.js +235 -0
  52. package/dist/esm/pending-installations.js.map +1 -0
  53. package/dist/esm/release-history-panel.js +100 -0
  54. package/dist/esm/release-history-panel.js.map +1 -0
  55. package/dist/esm/release-notes-card.js +23 -0
  56. package/dist/esm/release-notes-card.js.map +1 -0
  57. package/dist/esm/security-card.js +700 -0
  58. package/dist/esm/security-card.js.map +1 -0
  59. package/dist/esm/support-bundle-collection-card.js +170 -0
  60. package/dist/esm/support-bundle-collection-card.js.map +1 -0
  61. package/dist/esm/support-bundles-card.js +306 -0
  62. package/dist/esm/support-bundles-card.js.map +1 -0
  63. package/dist/esm/support-card.js +305 -0
  64. package/dist/esm/support-card.js.map +1 -0
  65. package/dist/esm/team-selection.js +117 -0
  66. package/dist/esm/team-selection.js.map +1 -0
  67. package/dist/esm/team-settings-card.js +78 -0
  68. package/dist/esm/team-settings-card.js.map +1 -0
  69. package/dist/esm/team-settings.js +136 -0
  70. package/dist/esm/team-settings.js.map +1 -0
  71. package/dist/esm/top-nav-user-menu.js +173 -0
  72. package/dist/esm/top-nav-user-menu.js.map +1 -0
  73. package/dist/esm/top-nav.js +398 -0
  74. package/dist/esm/top-nav.js.map +1 -0
  75. package/dist/esm/update-layout.js +405 -0
  76. package/dist/esm/update-layout.js.map +1 -0
  77. package/dist/esm/updates-card.js +85 -0
  78. package/dist/esm/updates-card.js.map +1 -0
  79. package/dist/esm/upload-support-bundle-modal.js +143 -0
  80. package/dist/esm/upload-support-bundle-modal.js.map +1 -0
  81. package/dist/esm/user-settings-card.js +21 -0
  82. package/dist/esm/user-settings-card.js.map +1 -0
  83. package/dist/esm/user-settings.js +368 -0
  84. package/dist/esm/user-settings.js.map +1 -0
  85. package/dist/esm/utils/index.js +170 -0
  86. package/dist/esm/utils/index.js.map +1 -0
  87. package/dist/helm-install-wizard.d.mts +38 -0
  88. package/dist/helm-install-wizard.d.ts +38 -0
  89. package/dist/helm-install-wizard.js +1011 -0
  90. package/dist/helm-install-wizard.js.map +1 -0
  91. package/dist/index.d.mts +11 -20
  92. package/dist/index.d.ts +11 -20
  93. package/dist/index.js +2266 -81
  94. package/dist/index.js.map +1 -1
  95. package/dist/install-B19AaKF_.d.mts +233 -0
  96. package/dist/install-Bi1qJ8Bu.d.ts +233 -0
  97. package/dist/install-actions.d.mts +141 -0
  98. package/dist/install-actions.d.ts +141 -0
  99. package/dist/install-actions.js +765 -0
  100. package/dist/install-actions.js.map +1 -0
  101. package/dist/install-card.d.mts +15 -0
  102. package/dist/install-card.d.ts +15 -0
  103. package/dist/install-card.js +117 -0
  104. package/dist/install-card.js.map +1 -0
  105. package/dist/install-targets.d.mts +19 -0
  106. package/dist/install-targets.d.ts +19 -0
  107. package/dist/install-targets.js +50 -0
  108. package/dist/install-targets.js.map +1 -0
  109. package/dist/instance-card.d.mts +22 -0
  110. package/dist/instance-card.d.ts +22 -0
  111. package/dist/instance-card.js +199 -0
  112. package/dist/instance-card.js.map +1 -0
  113. package/dist/join-team.d.mts +30 -0
  114. package/dist/join-team.d.ts +30 -0
  115. package/dist/join-team.js +220 -0
  116. package/dist/join-team.js.map +1 -0
  117. package/dist/license-card.d.mts +15 -0
  118. package/dist/license-card.d.ts +15 -0
  119. package/dist/license-card.js +133 -0
  120. package/dist/license-card.js.map +1 -0
  121. package/dist/license-details.d.mts +10 -0
  122. package/dist/license-details.d.ts +10 -0
  123. package/dist/license-details.js +669 -0
  124. package/dist/license-details.js.map +1 -0
  125. package/dist/linux-install-wizard.d.mts +66 -0
  126. package/dist/linux-install-wizard.d.ts +66 -0
  127. package/dist/linux-install-wizard.js +1093 -0
  128. package/dist/linux-install-wizard.js.map +1 -0
  129. package/dist/login.d.mts +37 -0
  130. package/dist/login.d.ts +37 -0
  131. package/dist/login.js +263 -0
  132. package/dist/login.js.map +1 -0
  133. package/dist/online-instance-list.d.mts +22 -0
  134. package/dist/online-instance-list.d.ts +22 -0
  135. package/dist/online-instance-list.js +289 -0
  136. package/dist/online-instance-list.js.map +1 -0
  137. package/dist/pending-installations.d.mts +15 -0
  138. package/dist/pending-installations.d.ts +15 -0
  139. package/dist/pending-installations.js +237 -0
  140. package/dist/pending-installations.js.map +1 -0
  141. package/dist/release-history-panel.d.mts +22 -0
  142. package/dist/release-history-panel.d.ts +22 -0
  143. package/dist/release-history-panel.js +102 -0
  144. package/dist/release-history-panel.js.map +1 -0
  145. package/dist/release-notes-card.d.mts +13 -0
  146. package/dist/release-notes-card.d.ts +13 -0
  147. package/dist/release-notes-card.js +25 -0
  148. package/dist/release-notes-card.js.map +1 -0
  149. package/dist/security-card.d.mts +73 -0
  150. package/dist/security-card.d.ts +73 -0
  151. package/dist/security-card.js +702 -0
  152. package/dist/security-card.js.map +1 -0
  153. package/dist/styles.css +1885 -191
  154. package/dist/support-bundle-collection-card.d.mts +20 -0
  155. package/dist/support-bundle-collection-card.d.ts +20 -0
  156. package/dist/support-bundle-collection-card.js +172 -0
  157. package/dist/support-bundle-collection-card.js.map +1 -0
  158. package/dist/support-bundles-card.d.mts +19 -0
  159. package/dist/support-bundles-card.d.ts +19 -0
  160. package/dist/support-bundles-card.js +308 -0
  161. package/dist/support-bundles-card.js.map +1 -0
  162. package/dist/support-card.d.mts +8 -0
  163. package/dist/support-card.d.ts +8 -0
  164. package/dist/support-card.js +307 -0
  165. package/dist/support-card.js.map +1 -0
  166. package/dist/team-selection.d.mts +23 -0
  167. package/dist/team-selection.d.ts +23 -0
  168. package/dist/team-selection.js +119 -0
  169. package/dist/team-selection.js.map +1 -0
  170. package/dist/team-settings-card-Dq1d9b5c.d.mts +14 -0
  171. package/dist/team-settings-card-Dq1d9b5c.d.ts +14 -0
  172. package/dist/team-settings-card.d.mts +2 -0
  173. package/dist/team-settings-card.d.ts +2 -0
  174. package/dist/team-settings-card.js +80 -0
  175. package/dist/team-settings-card.js.map +1 -0
  176. package/dist/team-settings.d.mts +25 -0
  177. package/dist/team-settings.d.ts +25 -0
  178. package/dist/team-settings.js +138 -0
  179. package/dist/team-settings.js.map +1 -0
  180. package/dist/top-nav-0mb1K_H0.d.mts +32 -0
  181. package/dist/top-nav-0mb1K_H0.d.ts +32 -0
  182. package/dist/top-nav-user-menu.d.mts +18 -0
  183. package/dist/top-nav-user-menu.d.ts +18 -0
  184. package/dist/top-nav-user-menu.js +175 -0
  185. package/dist/top-nav-user-menu.js.map +1 -0
  186. package/dist/top-nav.d.mts +3 -0
  187. package/dist/top-nav.d.ts +3 -0
  188. package/dist/top-nav.js +400 -0
  189. package/dist/top-nav.js.map +1 -0
  190. package/dist/update-layout.d.mts +12 -0
  191. package/dist/update-layout.d.ts +12 -0
  192. package/dist/update-layout.js +407 -0
  193. package/dist/update-layout.js.map +1 -0
  194. package/dist/updates-card-BbubBrVR.d.mts +18 -0
  195. package/dist/updates-card-BbubBrVR.d.ts +18 -0
  196. package/dist/updates-card.d.mts +2 -0
  197. package/dist/updates-card.d.ts +2 -0
  198. package/dist/updates-card.js +87 -0
  199. package/dist/updates-card.js.map +1 -0
  200. package/dist/upload-support-bundle-modal.d.mts +19 -0
  201. package/dist/upload-support-bundle-modal.d.ts +19 -0
  202. package/dist/upload-support-bundle-modal.js +145 -0
  203. package/dist/upload-support-bundle-modal.js.map +1 -0
  204. package/dist/user-settings-card.d.mts +8 -0
  205. package/dist/user-settings-card.d.ts +8 -0
  206. package/dist/user-settings-card.js +23 -0
  207. package/dist/user-settings-card.js.map +1 -0
  208. package/dist/user-settings.d.mts +47 -0
  209. package/dist/user-settings.d.ts +47 -0
  210. package/dist/user-settings.js +370 -0
  211. package/dist/user-settings.js.map +1 -0
  212. package/dist/utils/index.d.mts +70 -0
  213. package/dist/utils/index.d.ts +70 -0
  214. package/dist/utils/index.js +177 -0
  215. package/dist/utils/index.js.map +1 -0
  216. package/package.json +163 -3
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/support-bundles-card.tsx"],"names":["jsxs","jsx","useState","useCallback","Fragment"],"mappings":";;;;;;;;;;AAgBA,IAAM,WAAA,GAAc,CAAC,KAAA,EAAe,QAAA,GAAW,CAAA,KAAc;AAC3D,EAAA,IAAI,KAAA,KAAU,GAAG,OAAO,SAAA;AAExB,EAAA,MAAM,CAAA,GAAI,IAAA;AACV,EAAA,MAAM,EAAA,GAAK,QAAA,GAAW,CAAA,GAAI,CAAA,GAAI,QAAA;AAC9B,EAAA,MAAM,QAAQ,CAAC,OAAA,EAAS,IAAA,EAAM,IAAA,EAAM,MAAM,IAAI,CAAA;AAE9C,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAC,CAAC,CAAA;AAElD,EAAA,OAAO,CAAA,EAAG,UAAA,CAAA,CAAY,KAAA,GAAQ,IAAA,CAAK,IAAI,CAAA,EAAG,CAAC,CAAA,EAAG,OAAA,CAAQ,EAAE,CAAC,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AACxE,CAAA;AAEA,IAAM,YAAA,GAAe,CAAC,EAAE,SAAA,EAAU,qBAChCA,eAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,KAAA,EAAM,4BAAA;AAAA,IACN,OAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAK,MAAA;AAAA,IACL,MAAA,EAAO,cAAA;AAAA,IACP,WAAA,EAAY,KAAA;AAAA,IACZ,SAAA;AAAA,IACA,aAAA,EAAY,MAAA;AAAA,IAEZ,QAAA,EAAA;AAAA,sBAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,GAAE,UAAA,EAAW,CAAA;AAAA,sBACnBA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,eAAA,EAAgB,CAAA;AAAA,sBACxBA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,UAAA,EAAW;AAAA;AAAA;AACrB,CAAA;AAGF,IAAM,SAAA,GAAY,CAAC,EAAE,SAAA,EAAU,qBAC7BD,eAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,KAAA,EAAM,4BAAA;AAAA,IACN,OAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAK,MAAA;AAAA,IACL,MAAA,EAAO,cAAA;AAAA,IACP,WAAA,EAAY,KAAA;AAAA,IACZ,SAAA;AAAA,IACA,aAAA,EAAY,MAAA;AAAA,IAEZ,QAAA,EAAA;AAAA,sBAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,GAAE,SAAA,EAAU,CAAA;AAAA,sBAClBA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,0CAAA,EAA2C,CAAA;AAAA,sBACnDA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,wCAAA,EAAyC,CAAA;AAAA,sBACjDA,cAAA,CAAC,UAAK,EAAA,EAAG,IAAA,EAAK,IAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA;AAAA,sBACtCA,cAAA,CAAC,UAAK,EAAA,EAAG,IAAA,EAAK,IAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK;AAAA;AAAA;AACxC,CAAA;AAGF,IAAM,SAAA,GAAY,CAAC,EAAE,SAAA,EAAU,qBAC7BD,eAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,KAAA,EAAM,4BAAA;AAAA,IACN,OAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAK,MAAA;AAAA,IACL,MAAA,EAAO,cAAA;AAAA,IACP,WAAA,EAAY,GAAA;AAAA,IACZ,SAAA;AAAA,IACA,aAAA,EAAY,MAAA;AAAA,IAEZ,QAAA,EAAA;AAAA,sBAAAC,cAAA,CAAC,YAAO,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,GAAE,IAAA,EAAK,CAAA;AAAA,sBAC/BA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,eAAA,EAAgB;AAAA;AAAA;AAC1B,CAAA;AAGF,IAAM,WAAA,GAAc,CAAC,EAAE,SAAA,EAAU,qBAC/BA,cAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,KAAA,EAAM,4BAAA;AAAA,IACN,OAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAK,MAAA;AAAA,IACL,MAAA,EAAO,cAAA;AAAA,IACP,WAAA,EAAY,GAAA;AAAA,IACZ,SAAA;AAAA,IACA,aAAA,EAAY,MAAA;AAAA,IAEZ,QAAA,kBAAAA,cAAA,CAAC,YAAO,EAAA,EAAG,IAAA,EAAK,IAAG,IAAA,EAAK,CAAA,EAAE,IAAA,EAAK,eAAA,EAAgB,KAAA,EAAM;AAAA;AACvD,CAAA;AAGF,IAAM,iBAAA,GAAoB,CAAC,EAAE,SAAA,EAAU,qBACrCD,eAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,KAAA,EAAM,4BAAA;AAAA,IACN,OAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAK,MAAA;AAAA,IACL,MAAA,EAAO,cAAA;AAAA,IACP,WAAA,EAAY,GAAA;AAAA,IACZ,SAAA;AAAA,IACA,aAAA,EAAY,MAAA;AAAA,IAEZ,QAAA,EAAA;AAAA,sBAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,GAAE,0FAAA,EAA2F,CAAA;AAAA,sBACnGA,cAAA,CAAC,UAAK,EAAA,EAAG,IAAA,EAAK,IAAG,GAAA,EAAI,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA;AAAA,sBACrCA,cAAA,CAAC,UAAK,EAAA,EAAG,IAAA,EAAK,IAAG,IAAA,EAAK,EAAA,EAAG,OAAA,EAAQ,EAAA,EAAG,IAAA,EAAK;AAAA;AAAA;AAC3C,CAAA;AAGK,IAAM,qBAAqB,CAAC;AAAA,EACjC,UAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA,GAAe;AACjB,CAAA,KAA+B;AAC7B,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIC,eAAwB,IAAI,CAAA;AACtE,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,eAAwB,IAAI,CAAA;AAChE,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIA,eAAsC,IAAI,CAAA;AACtF,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAwB,IAAI,CAAA;AAEtD,EAAA,MAAM,cAAA,GAAiBC,iBAAA,CAAY,OAAO,QAAA,KAAqB;AAC7D,IAAA,IAAI,CAAC,UAAA,EAAY;AAEjB,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,gBAAA,CAAiB,QAAQ,CAAA;AAEzB,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,GAAY,MAAM,UAAA,CAAW,QAAQ,CAAA;AAE3C,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,aAAA,CAAc,GAAG,CAAA;AACvC,MAAA,IAAA,CAAK,IAAA,GAAO,SAAA;AACZ,MAAA,IAAA,CAAK,YAAA,CAAa,YAAY,EAAE,CAAA;AAChC,MAAA,QAAA,CAAS,IAAA,CAAK,YAAY,IAAI,CAAA;AAC9B,MAAA,IAAA,CAAK,KAAA,EAAM;AACX,MAAA,QAAA,CAAS,IAAA,CAAK,YAAY,IAAI,CAAA;AAAA,IAChC,SAAS,GAAA,EAAK;AACZ,MAAA,QAAA,CAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,2BAA2B,CAAA;AAAA,IAC3E,CAAA,SAAE;AACA,MAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA,IACvB;AAAA,EACF,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,MAAM,iBAAA,GAAoBA,iBAAA,CAAY,CAAC,MAAA,KAAiC;AACtE,IAAA,iBAAA,CAAkB,MAAM,CAAA;AAAA,EAC1B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,mBAAA,GAAsBA,kBAAY,YAAY;AAClD,IAAA,IAAI,CAAC,QAAA,IAAY,CAAC,cAAA,EAAgB;AAElC,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,aAAA,CAAc,eAAe,EAAE,CAAA;AAE/B,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,CAAS,eAAe,EAAE,CAAA;AAChC,MAAA,iBAAA,CAAkB,IAAI,CAAA;AAAA,IACxB,SAAS,GAAA,EAAK;AACZ,MAAA,QAAA,CAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,yBAAyB,CAAA;AACvE,MAAA,iBAAA,CAAkB,IAAI,CAAA;AAAA,IACxB,CAAA,SAAE;AACA,MAAA,aAAA,CAAc,IAAI,CAAA;AAAA,IACpB;AAAA,EACF,CAAA,EAAG,CAAC,QAAA,EAAU,cAAc,CAAC,CAAA;AAE7B,EAAA,MAAM,kBAAA,GAAqBA,kBAAY,MAAM;AAC3C,IAAA,iBAAA,CAAkB,IAAI,CAAA;AAAA,EACxB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,gBAAA,GAAmB,aAAA,KAAkB,IAAA,IAAQ,UAAA,KAAe,IAAA;AAElE,EAAA,MAAM,YAAA,GAAe,CAAC,QAAA,KAA+C;AACnE,IAAA,MAAM,MAAA,GAAS,UAAU,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,KAAA,KAAU,OAAO,CAAA,EAAG,MAAA,IAAU,CAAA;AACvE,IAAA,MAAM,QAAA,GAAW,UAAU,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,KAAA,KAAU,MAAM,CAAA,EAAG,MAAA,IAAU,CAAA;AAExE,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,QAAA,EAAU;AACxB,MAAA,uBACEF,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,eAAA,EAAgB,QAAA,EAAA,iBAAA,EAAe,CAAA;AAAA,IAEnD;AAEA,IAAA,uBACED,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACZ,QAAA,EAAA;AAAA,MAAA,MAAA,GAAS,CAAA,oBACRA,eAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,6CAAA,EACd,QAAA,EAAA;AAAA,wBAAAC,cAAA,CAAC,iBAAA,EAAA,EAAkB,WAAU,SAAA,EAAU,CAAA;AAAA,QACtC,MAAA;AAAA,QAAO,GAAA;AAAA,QAAE,MAAA,KAAW,IAAI,OAAA,GAAU;AAAA,OAAA,EACrC,CAAA;AAAA,MAED,QAAA,GAAW,CAAA,oBACVD,eAAA,CAAC,MAAA,EAAA,EAAK,WAAU,gDAAA,EACd,QAAA,EAAA;AAAA,wBAAAC,cAAA,CAAC,iBAAA,EAAA,EAAkB,WAAU,SAAA,EAAU,CAAA;AAAA,QACtC,QAAA;AAAA,QAAS,GAAA;AAAA,QAAE,QAAA,KAAa,IAAI,SAAA,GAAY;AAAA,OAAA,EAC3C;AAAA,KAAA,EAEJ,CAAA;AAAA,EAEJ,CAAA;AAEA,EAAA,uBACED,eAAA,CAAAI,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAJ,eAAA,CAAC,SAAA,EAAA,EAAQ,WAAU,0FAAA,EACjB,QAAA,EAAA;AAAA,sBAAAA,eAAA,CAAC,QAAA,EAAA,EAAO,WAAU,mCAAA,EAChB,QAAA,EAAA;AAAA,wBAAAC,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,qCAAA,EAAsC,QAAA,EAAA,iBAAA,EAAe,CAAA;AAAA,QAClE,UAAA,GAAa,CAAA,oBACZD,eAAA,CAAC,MAAA,EAAA,EAAK,WAAU,uBAAA,EAAyB,QAAA,EAAA;AAAA,UAAA,UAAA;AAAA,UAAW;AAAA,SAAA,EAAM;AAAA,OAAA,EAE9D,CAAA;AAAA,MAEC,KAAA,oBACCC,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4DACZ,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,sBAGFA,cAAA,CAAC,SAAI,SAAA,EAAU,MAAA,EACZ,kBAAQ,MAAA,KAAW,CAAA,kCACjB,GAAA,EAAA,EAAE,SAAA,EAAU,4GAA2G,QAAA,EAAA,4CAAA,EAExH,CAAA,kCAEC,KAAA,EAAA,EAAI,SAAA,EAAU,qDACb,QAAA,kBAAAD,eAAA,CAAC,OAAA,EAAA,EAAM,WAAU,qCAAA,EACf,QAAA,EAAA;AAAA,wBAAAC,cAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,YAAA,EACf,QAAA,kBAAAD,eAAA,CAAC,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAAC,cAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAM,KAAA,EAAM,SAAA,EAAU,kFAAiF,QAAA,EAAA,UAAA,EAE3G,CAAA;AAAA,yCACC,IAAA,EAAA,EAAG,KAAA,EAAM,KAAA,EAAM,SAAA,EAAU,kFAAiF,QAAA,EAAA,gBAAA,EAE3G,CAAA;AAAA,yCACC,IAAA,EAAA,EAAG,KAAA,EAAM,KAAA,EAAM,SAAA,EAAU,kFAAiF,QAAA,EAAA,QAAA,EAE3G,CAAA;AAAA,yCACC,IAAA,EAAA,EAAG,KAAA,EAAM,KAAA,EAAM,SAAA,EAAU,kFAAiF,QAAA,EAAA,QAAA,EAE3G,CAAA;AAAA,yCACC,IAAA,EAAA,EAAG,KAAA,EAAM,KAAA,EAAM,SAAA,EAAU,kFAAiF,QAAA,EAAA,MAAA,EAE3G,CAAA;AAAA,UAAA,CACE,UAAA,IAAc,QAAA,qBACdA,cAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAM,KAAA,EAAM,SAAA,EAAU,oBAAA,EACxB,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU,qBAAO,CAAA,EACnC;AAAA,SAAA,EAEJ,CAAA,EACF,CAAA;AAAA,uCACC,OAAA,EAAA,EAAM,SAAA,EAAU,qCACd,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,KAAW;AACvB,UAAA,MAAM,aAAA,GAAgB,kBAAkB,MAAA,CAAO,EAAA;AAC/C,UAAA,MAAM,UAAA,GAAa,eAAe,MAAA,CAAO,EAAA;AACzC,UAAA,MAAM,MAAA,GAAS,OAAO,MAAA,IAAU,UAAA;AAChC,UAAA,MAAM,aAAa,MAAA,KAAW,UAAA;AAE9B,UAAA,uCACG,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAA,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,mDAAA,EACV,QAAA,EAAA,CAAA,MAAA,CAAO,UAAA,IAAc,OAAO,EAAA,EAAI,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,EAC9C,CAAA;AAAA,4BACAA,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,mDAAA,EACX,QAAA,EAAA,MAAA,CAAO,SAAA,GACJ,IAAI,IAAA,CAAK,MAAA,CAAO,SAAS,CAAA,CAAE,cAAA,KAC3B,SAAA,EACN,CAAA;AAAA,4BACAA,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,6BAAA,EACZ,QAAA,kBAAAD,eAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAW,CAAA,8EAAA,EACT,UAAA,GACI,4BAAA,GACA,8BACN,CAAA,CAAA;AAAA,gBAEC,QAAA,EAAA;AAAA,kBAAA,UAAA,mBACCC,cAAA,CAAC,aAAU,SAAA,EAAU,SAAA,EAAU,oBAE/BA,cAAA,CAAC,WAAA,EAAA,EAAY,WAAU,SAAA,EAAU,CAAA;AAAA,kBAElC,MAAA,CAAO,OAAO,CAAC,CAAA,CAAE,aAAY,GAAI,MAAA,CAAO,MAAM,CAAC;AAAA;AAAA;AAAA,aAClD,EACF,CAAA;AAAA,2CACC,IAAA,EAAA,EAAG,SAAA,EAAU,uCACX,QAAA,EAAA,YAAA,CAAa,MAAA,CAAO,QAAQ,CAAA,EAC/B,CAAA;AAAA,4BACAA,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,mDAAA,EACX,QAAA,EAAA,MAAA,CAAO,OAAO,WAAA,CAAY,MAAA,CAAO,IAAI,CAAA,GAAI,QAAA,EAC5C,CAAA;AAAA,YAAA,CACE,UAAA,IAAc,6BACdA,cAAA,CAAC,IAAA,EAAA,EAAG,WAAU,4DAAA,EACZ,QAAA,kBAAAD,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qCAAA,EACZ,QAAA,EAAA;AAAA,cAAA,UAAA,oBACCA,eAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,QAAA;AAAA,kBACL,OAAA,EAAS,MAAM,cAAA,CAAe,MAAA,CAAO,EAAE,CAAA;AAAA,kBACvC,QAAA,EAAU,gBAAA;AAAA,kBACV,SAAA,EAAU,sFAAA;AAAA,kBAEV,QAAA,EAAA;AAAA,oCAAAC,cAAA,CAAC,YAAA,EAAA,EAAa,WAAU,SAAA,EAAU,CAAA;AAAA,oBACjC,gBAAgB,gBAAA,GAAmB;AAAA;AAAA;AAAA,eACtC;AAAA,cAED,QAAA,oBACCD,eAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,QAAA;AAAA,kBACL,OAAA,EAAS,MAAM,iBAAA,CAAkB,MAAM,CAAA;AAAA,kBACvC,QAAA,EAAU,gBAAA;AAAA,kBACV,SAAA,EAAU,oFAAA;AAAA,kBAEV,QAAA,EAAA;AAAA,oCAAAC,cAAA,CAAC,SAAA,EAAA,EAAU,WAAU,SAAA,EAAU,CAAA;AAAA,oBAC9B,aAAa,aAAA,GAAgB;AAAA;AAAA;AAAA;AAChC,aAAA,EAEJ,CAAA,EACF;AAAA,WAAA,EAAA,EAzDK,OAAO,EA2DhB,CAAA;AAAA,QAEJ,CAAC,CAAA,EACH;AAAA,OAAA,EACF,GACF,CAAA,EAEJ;AAAA,KAAA,EACF,CAAA;AAAA,IAGC,cAAA,oBACCA,cAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,iEAAA;AAAA,QACV,IAAA,EAAK,QAAA;AAAA,QACL,YAAA,EAAW,MAAA;AAAA,QACX,iBAAA,EAAgB,oBAAA;AAAA,QAEhB,QAAA,kBAAAD,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oDAAA,EACb,QAAA,EAAA;AAAA,0BAAAC,cAAA,CAAC,IAAA,EAAA,EAAG,EAAA,EAAG,oBAAA,EAAqB,SAAA,EAAU,uCAAsC,QAAA,EAAA,kBAAA,EAE5E,CAAA;AAAA,0BACAA,cAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,4BAAA,EAA6B,QAAA,EAAA,oFAAA,EAE1C,CAAA;AAAA,0BACAD,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sDAAA,EACb,QAAA,EAAA;AAAA,4BAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,MAAA,EACb,QAAA,EAAA;AAAA,8BAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,aAAA,EAAc,QAAA,EAAA,cAAA,EAAY,CAAA;AAAA,cAAQ,GAAA;AAAA,cAAA,CAChD,eAAe,UAAA,IAAc,cAAA,CAAe,EAAA,EAAI,KAAA,CAAM,GAAG,CAAC;AAAA,aAAA,EAC9D,CAAA;AAAA,4BACAD,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EACb,QAAA,EAAA;AAAA,8BAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,aAAA,EAAc,QAAA,EAAA,iBAAA,EAAe,CAAA;AAAA,cAAQ,GAAA;AAAA,cACpD,cAAA,CAAe,YACZ,IAAI,IAAA,CAAK,eAAe,SAAS,CAAA,CAAE,gBAAe,GAClD;AAAA,aAAA,EACN,CAAA;AAAA,YACC,cAAA,CAAe,IAAA,oBACdD,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,MAAA,EACb,QAAA,EAAA;AAAA,8BAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,aAAA,EAAc,QAAA,EAAA,OAAA,EAAK,CAAA;AAAA,cAAO,GAAA;AAAA,cAAE,WAAA,CAAY,eAAe,IAAI;AAAA,aAAA,EAC7E,CAAA;AAAA,4CAED,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,aAAA,EAAc,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,cAAQ,GAAA;AAAA,cAAA,CAC3C,cAAA,CAAe,MAAA,IAAU,UAAA,EAAY,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,EAAY,GAAA,CAC1D,cAAA,CAAe,MAAA,IAAU,UAAA,EAAY,KAAA,CAAM,CAAC;AAAA,aAAA,EACjD;AAAA,WAAA,EACF,CAAA;AAAA,0BACAD,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EACb,QAAA,EAAA;AAAA,4BAAAC,cAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,OAAA,EAAS,kBAAA;AAAA,gBACT,UAAU,UAAA,KAAe,IAAA;AAAA,gBACzB,SAAA,EAAU,qHAAA;AAAA,gBACX,QAAA,EAAA;AAAA;AAAA,aAED;AAAA,4BACAA,cAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,OAAA,EAAS,mBAAA;AAAA,gBACT,UAAU,UAAA,KAAe,IAAA;AAAA,gBACzB,SAAA,EAAU,qGAAA;AAAA,gBACV,KAAA,EAAO,EAAE,eAAA,EAAiB,YAAA,EAAa;AAAA,gBAEtC,QAAA,EAAA,UAAA,KAAe,OAAO,aAAA,GAAgB;AAAA;AAAA;AACzC,WAAA,EACF;AAAA,SAAA,EACF;AAAA;AAAA;AACF,GAAA,EAEJ,CAAA;AAEJ;AAEA,kBAAA,CAAmB,WAAA,GAAc,oBAAA","file":"support-bundles-card.js","sourcesContent":["\"use client\";\n\nimport { useState, useCallback } from \"react\";\nimport type { SupportBundleSummary } from \"../actions\";\n\ninterface SupportBundlesCardProps {\n totalCount: number;\n bundles: SupportBundleSummary[];\n /** Callback to download a bundle. Returns a signed URL. */\n onDownload?: (bundleId: string) => Promise<string>;\n /** Callback to delete a bundle. */\n onDelete?: (bundleId: string) => Promise<void>;\n /** Primary brand color. Defaults to \"#6366f1\". */\n primaryColor?: string;\n}\n\nconst 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\nconst DownloadIcon = ({ className }: { className?: string }) => (\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 className={className}\n aria-hidden=\"true\"\n >\n <path d=\"M12 3v14\" />\n <path d=\"M8 13l4 4 4-4\" />\n <path d=\"M5 21h14\" />\n </svg>\n);\n\nconst TrashIcon = ({ className }: { className?: string }) => (\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 className={className}\n aria-hidden=\"true\"\n >\n <path d=\"M3 6h18\" />\n <path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\" />\n <path d=\"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\" />\n <line x1=\"10\" y1=\"11\" x2=\"10\" y2=\"17\" />\n <line x1=\"14\" y1=\"11\" x2=\"14\" y2=\"17\" />\n </svg>\n);\n\nconst CheckIcon = ({ className }: { className?: string }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n className={className}\n aria-hidden=\"true\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M9 12l2 2 4-4\" />\n </svg>\n);\n\nconst PendingIcon = ({ className }: { className?: string }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n className={className}\n aria-hidden=\"true\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" strokeDasharray=\"4 2\" />\n </svg>\n);\n\nconst AlertTriangleIcon = ({ className }: { className?: string }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n className={className}\n aria-hidden=\"true\"\n >\n <path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n);\n\nexport const SupportBundlesCard = ({\n totalCount,\n bundles,\n onDownload,\n onDelete,\n primaryColor = \"#6366f1\"\n}: SupportBundlesCardProps) => {\n const [downloadingId, setDownloadingId] = useState<string | null>(null);\n const [deletingId, setDeletingId] = useState<string | null>(null);\n const [bundleToDelete, setBundleToDelete] = useState<SupportBundleSummary | null>(null);\n const [error, setError] = useState<string | null>(null);\n\n const handleDownload = useCallback(async (bundleId: string) => {\n if (!onDownload) return;\n\n setError(null);\n setDownloadingId(bundleId);\n\n try {\n const signedUrl = await onDownload(bundleId);\n // Trigger download via temporary link\n const link = document.createElement(\"a\");\n link.href = signedUrl;\n link.setAttribute(\"download\", \"\");\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Failed to download bundle\");\n } finally {\n setDownloadingId(null);\n }\n }, [onDownload]);\n\n const handleDeleteClick = useCallback((bundle: SupportBundleSummary) => {\n setBundleToDelete(bundle);\n }, []);\n\n const handleDeleteConfirm = useCallback(async () => {\n if (!onDelete || !bundleToDelete) return;\n\n setError(null);\n setDeletingId(bundleToDelete.id);\n\n try {\n await onDelete(bundleToDelete.id);\n setBundleToDelete(null);\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Failed to delete bundle\");\n setBundleToDelete(null);\n } finally {\n setDeletingId(null);\n }\n }, [onDelete, bundleToDelete]);\n\n const handleDeleteCancel = useCallback(() => {\n setBundleToDelete(null);\n }, []);\n\n const isActionDisabled = downloadingId !== null || deletingId !== null;\n\n const renderIssues = (insights: SupportBundleSummary[\"insights\"]) => {\n const errors = insights?.filter((i) => i.level === \"error\")?.length ?? 0;\n const warnings = insights?.filter((i) => i.level === \"warn\")?.length ?? 0;\n\n if (!errors && !warnings) {\n return (\n <span className=\"text-gray-400\">No issues found</span>\n );\n }\n\n return (\n <div className=\"flex items-center gap-2\">\n {errors > 0 && (\n <span className=\"inline-flex items-center gap-1 text-red-600\">\n <AlertTriangleIcon className=\"h-4 w-4\" />\n {errors} {errors === 1 ? \"error\" : \"errors\"}\n </span>\n )}\n {warnings > 0 && (\n <span className=\"inline-flex items-center gap-1 text-yellow-600\">\n <AlertTriangleIcon className=\"h-4 w-4\" />\n {warnings} {warnings === 1 ? \"warning\" : \"warnings\"}\n </span>\n )}\n </div>\n );\n };\n\n return (\n <>\n <section className=\"rounded-3xl border border-gray-100 bg-white p-8 shadow-[0_18px_45px_rgba(17,24,39,0.08)]\">\n <header className=\"flex items-center justify-between\">\n <h2 className=\"text-xl font-semibold text-gray-900\">Support Bundles</h2>\n {totalCount > 0 && (\n <span className=\"text-sm text-gray-500\">{totalCount} total</span>\n )}\n </header>\n\n {error && (\n <div className=\"mt-4 rounded-lg bg-red-50 px-3 py-2 text-sm text-red-700\">\n {error}\n </div>\n )}\n\n <div className=\"mt-4\">\n {bundles.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 support bundles have been uploaded yet.\n </p>\n ) : (\n <div className=\"overflow-hidden rounded-xl border border-gray-200\">\n <table className=\"min-w-full divide-y divide-gray-200\">\n <thead className=\"bg-gray-50\">\n <tr>\n <th scope=\"col\" className=\"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500\">\n Instance\n </th>\n <th scope=\"col\" className=\"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500\">\n Date Collected\n </th>\n <th scope=\"col\" className=\"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500\">\n Status\n </th>\n <th scope=\"col\" className=\"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500\">\n Issues\n </th>\n <th scope=\"col\" className=\"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500\">\n Size\n </th>\n {(onDownload || onDelete) && (\n <th scope=\"col\" className=\"relative px-4 py-3\">\n <span className=\"sr-only\">Actions</span>\n </th>\n )}\n </tr>\n </thead>\n <tbody className=\"divide-y divide-gray-200 bg-white\">\n {bundles.map((bundle) => {\n const isDownloading = downloadingId === bundle.id;\n const isDeleting = deletingId === bundle.id;\n const status = bundle.status ?? \"uploaded\";\n const isUploaded = status === \"uploaded\";\n\n return (\n <tr key={bundle.id}>\n <td className=\"whitespace-nowrap px-4 py-3 text-sm text-gray-900\">\n {(bundle.instanceId || bundle.id).slice(0, 7)}\n </td>\n <td className=\"whitespace-nowrap px-4 py-3 text-sm text-gray-500\">\n {bundle.createdAt\n ? new Date(bundle.createdAt).toLocaleString()\n : \"Unknown\"}\n </td>\n <td className=\"whitespace-nowrap px-4 py-3\">\n <span\n className={`inline-flex items-center gap-1 rounded-full px-2.5 py-0.5 text-xs font-medium ${\n isUploaded\n ? \"bg-green-50 text-green-700\"\n : \"bg-yellow-50 text-yellow-700\"\n }`}\n >\n {isUploaded ? (\n <CheckIcon className=\"h-3 w-3\" />\n ) : (\n <PendingIcon className=\"h-3 w-3\" />\n )}\n {status.charAt(0).toUpperCase() + status.slice(1)}\n </span>\n </td>\n <td className=\"whitespace-nowrap px-4 py-3 text-sm\">\n {renderIssues(bundle.insights)}\n </td>\n <td className=\"whitespace-nowrap px-4 py-3 text-sm text-gray-500\">\n {bundle.size ? formatBytes(bundle.size) : \"—\"}\n </td>\n {(onDownload || onDelete) && (\n <td className=\"whitespace-nowrap px-4 py-3 text-right text-sm font-medium\">\n <div className=\"flex items-center justify-end gap-3\">\n {onDownload && (\n <button\n type=\"button\"\n onClick={() => handleDownload(bundle.id)}\n disabled={isActionDisabled}\n className=\"inline-flex items-center gap-1 text-gray-600 hover:text-gray-900 disabled:opacity-50\"\n >\n <DownloadIcon className=\"h-4 w-4\" />\n {isDownloading ? \"Downloading...\" : \"Download\"}\n </button>\n )}\n {onDelete && (\n <button\n type=\"button\"\n onClick={() => handleDeleteClick(bundle)}\n disabled={isActionDisabled}\n className=\"inline-flex items-center gap-1 text-red-600 hover:text-red-700 disabled:opacity-50\"\n >\n <TrashIcon className=\"h-4 w-4\" />\n {isDeleting ? \"Deleting...\" : \"Delete\"}\n </button>\n )}\n </div>\n </td>\n )}\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n )}\n </div>\n </section>\n\n {/* Delete Confirmation Modal */}\n {bundleToDelete && (\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"delete-modal-title\"\n >\n <div className=\"w-full max-w-md rounded-2xl bg-white p-6 shadow-xl\">\n <h3 id=\"delete-modal-title\" className=\"text-lg font-semibold text-gray-900\">\n Confirm Deletion\n </h3>\n <p className=\"mt-2 text-sm text-gray-600\">\n Are you sure you want to delete this support bundle? This action cannot be undone.\n </p>\n <div className=\"mt-4 rounded-lg bg-gray-50 p-3 text-sm text-gray-700\">\n <div className=\"mb-1\">\n <span className=\"font-medium\">Instance ID:</span>{\" \"}\n {(bundleToDelete.instanceId || bundleToDelete.id).slice(0, 7)}\n </div>\n <div className=\"mb-1\">\n <span className=\"font-medium\">Date Collected:</span>{\" \"}\n {bundleToDelete.createdAt\n ? new Date(bundleToDelete.createdAt).toLocaleString()\n : \"Unknown\"}\n </div>\n {bundleToDelete.size && (\n <div className=\"mb-1\">\n <span className=\"font-medium\">Size:</span> {formatBytes(bundleToDelete.size)}\n </div>\n )}\n <div>\n <span className=\"font-medium\">Status:</span>{\" \"}\n {(bundleToDelete.status ?? \"uploaded\").charAt(0).toUpperCase() +\n (bundleToDelete.status ?? \"uploaded\").slice(1)}\n </div>\n </div>\n <div className=\"mt-6 flex justify-end gap-3\">\n <button\n type=\"button\"\n onClick={handleDeleteCancel}\n disabled={deletingId !== null}\n className=\"rounded-lg bg-gray-100 px-4 py-2 text-sm font-medium text-gray-700 transition hover:bg-gray-200 disabled:opacity-50\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n onClick={handleDeleteConfirm}\n disabled={deletingId !== null}\n className=\"rounded-lg px-4 py-2 text-sm font-medium text-white transition hover:opacity-90 disabled:opacity-50\"\n style={{ backgroundColor: primaryColor }}\n >\n {deletingId !== null ? \"Deleting...\" : \"Delete\"}\n </button>\n </div>\n </div>\n </div>\n )}\n </>\n );\n};\n\nSupportBundlesCard.displayName = \"SupportBundlesCard\";\n"]}
@@ -0,0 +1,8 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ declare const SupportCard: {
4
+ (): Promise<react_jsx_runtime.JSX.Element>;
5
+ displayName: string;
6
+ };
7
+
8
+ export { SupportCard };
@@ -0,0 +1,8 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ declare const SupportCard: {
4
+ (): Promise<react_jsx_runtime.JSX.Element>;
5
+ displayName: string;
6
+ };
7
+
8
+ export { SupportCard };
@@ -0,0 +1,307 @@
1
+ 'use strict';
2
+
3
+ var react = require('react');
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+
6
+ /**
7
+ * Enterprise Portal Components
8
+ * This file is generated by tsup. Do not edit manually.
9
+ */
10
+
11
+
12
+ // src/utils/api-client.ts
13
+ function isRedirectError(error) {
14
+ return typeof error === "object" && error !== null && "digest" in error && typeof error.digest === "string" && error.digest.startsWith("NEXT_REDIRECT");
15
+ }
16
+ async function authenticatedFetch(url, options = {}) {
17
+ const { token, ...fetchOptions } = options;
18
+ const headers = new Headers(fetchOptions.headers);
19
+ if (token) {
20
+ headers.set("authorization", `Bearer ${token}`);
21
+ }
22
+ const response = await fetch(url, {
23
+ ...fetchOptions,
24
+ headers
25
+ });
26
+ if (response.status === 401) {
27
+ await handle401();
28
+ }
29
+ if (response.status === 502 || response.status === 503 || response.status === 504) {
30
+ await handleServerError(response.status);
31
+ }
32
+ return response;
33
+ }
34
+ async function handle401() {
35
+ const { redirect } = await import('next/navigation');
36
+ return redirect("/?expired=1");
37
+ }
38
+ async function handleServerError(statusCode) {
39
+ const { redirect } = await import('next/navigation');
40
+ let sourceUrl;
41
+ try {
42
+ const { headers } = await import('next/headers');
43
+ const headersList = await headers();
44
+ const referer = headersList.get("referer");
45
+ const host = headersList.get("host");
46
+ const pathname = headersList.get("x-invoke-path") || headersList.get("x-forwarded-path");
47
+ if (referer) {
48
+ sourceUrl = referer;
49
+ } else if (host && pathname) {
50
+ const protocol = headersList.get("x-forwarded-proto") || "https";
51
+ sourceUrl = `${protocol}://${host}${pathname}`;
52
+ }
53
+ } catch (error) {
54
+ console.debug("[portal-components] Could not determine source URL", error);
55
+ }
56
+ const params = new URLSearchParams({ code: String(statusCode) });
57
+ if (sourceUrl) {
58
+ params.set("source", sourceUrl);
59
+ }
60
+ return redirect(`/error?${params.toString()}`);
61
+ }
62
+
63
+ // src/actions/index.ts
64
+ var getApiOrigin = () => {
65
+ return (process.env.REPLICATED_APP_ORIGIN || "https://replicated.app").replace(/\/+$/, "");
66
+ };
67
+ var defineServerAction = (definition) => definition;
68
+ var fetchCustomBrandingImpl = async () => {
69
+ const appSlug = process.env.PORTAL_APP_SLUG;
70
+ if (!appSlug) {
71
+ throw new Error("PORTAL_APP_SLUG is not configured");
72
+ }
73
+ const url = `${getApiOrigin()}/v3/custom-branding?app_slug=${encodeURIComponent(
74
+ appSlug
75
+ )}`;
76
+ if (process.env.NODE_ENV !== "production") {
77
+ console.debug(
78
+ "[portal-components] fetching custom branding via %s",
79
+ url
80
+ );
81
+ }
82
+ const response = await fetch(url, {
83
+ headers: {
84
+ accept: "application/json"
85
+ }
86
+ });
87
+ if (!response.ok) {
88
+ throw new Error(
89
+ `Custom branding request failed (${response.status} ${response.statusText})`
90
+ );
91
+ }
92
+ const payload = await response.json();
93
+ const brandingData = payload?.branding_data;
94
+ if (typeof brandingData !== "string") {
95
+ throw new Error("Custom branding response missing branding_data string");
96
+ }
97
+ return {
98
+ brandingData,
99
+ documentation: payload?.documentation ?? null
100
+ };
101
+ };
102
+ react.cache(fetchCustomBrandingImpl);
103
+ var decodeJwtPayload = (token) => {
104
+ const parts = token.split(".");
105
+ if (parts.length !== 3) {
106
+ throw new Error("Invalid JWT received");
107
+ }
108
+ const payloadSegment = parts[1];
109
+ if (!payloadSegment) {
110
+ throw new Error("JWT payload segment missing");
111
+ }
112
+ const padded = payloadSegment.padEnd(
113
+ payloadSegment.length + (4 - payloadSegment.length % 4) % 4,
114
+ "="
115
+ );
116
+ const decoded = Buffer.from(padded, "base64").toString("utf-8");
117
+ return JSON.parse(decoded);
118
+ };
119
+ var resolveSupportBundlesEndpoint = () => {
120
+ const fallback = `${getApiOrigin()}/v3/supportbundles`;
121
+ const explicit = process.env.SUPPORT_BUNDLES_ENDPOINT;
122
+ if (!explicit) {
123
+ return new URL(fallback);
124
+ }
125
+ try {
126
+ return new URL(explicit);
127
+ } catch (error) {
128
+ console.warn(
129
+ `[portal-components] invalid SUPPORT_BUNDLES_ENDPOINT, using fallback`,
130
+ error
131
+ );
132
+ return new URL(fallback);
133
+ }
134
+ };
135
+ var listSupportBundles = defineServerAction({
136
+ id: "support/list-bundles",
137
+ description: "Fetches support bundles associated with the customer found in the portal session JWT.",
138
+ visibility: "customer",
139
+ tags: ["support", "bundles"],
140
+ async run({ token }, context) {
141
+ if (!token || typeof token !== "string") {
142
+ throw new Error("Support bundle listing requires a session token");
143
+ }
144
+ const payload = decodeJwtPayload(token);
145
+ const customerId = payload?.customer_id;
146
+ if (typeof customerId !== "string" || !customerId.trim()) {
147
+ throw new Error("Unable to determine customer_id from session token");
148
+ }
149
+ const url = resolveSupportBundlesEndpoint();
150
+ url.searchParams.set("customer_id", customerId.trim());
151
+ if (process.env.NODE_ENV !== "production") {
152
+ console.debug("[portal-components] fetching support bundles via %s", url);
153
+ }
154
+ const response = await authenticatedFetch(url.toString(), {
155
+ token,
156
+ headers: {
157
+ accept: "application/json"
158
+ },
159
+ signal: context?.signal
160
+ });
161
+ if (context?.signal?.aborted) {
162
+ throw new Error("Support bundles request was aborted");
163
+ }
164
+ if (!response.ok) {
165
+ throw new Error(
166
+ `Support bundles request failed (${response.status} ${response.statusText})`
167
+ );
168
+ }
169
+ const raw = await response.json();
170
+ const rawRecord = raw && typeof raw === "object" ? raw : void 0;
171
+ const parseInsights = (raw2) => {
172
+ if (!Array.isArray(raw2)) return void 0;
173
+ return raw2.filter((i) => i && typeof i === "object").map((i) => ({
174
+ level: String(i.level ?? ""),
175
+ primary: String(i.primary ?? ""),
176
+ key: typeof i.key === "string" ? i.key : void 0,
177
+ detail: typeof i.detail === "string" ? i.detail : void 0
178
+ }));
179
+ };
180
+ const bundles = Array.isArray(
181
+ rawRecord?.supportBundles
182
+ ) ? (rawRecord?.supportBundles).map((item) => {
183
+ if (!item || typeof item !== "object") {
184
+ return {
185
+ id: "",
186
+ createdAt: void 0,
187
+ status: void 0,
188
+ size: void 0,
189
+ instanceId: void 0,
190
+ insights: void 0,
191
+ metadata: void 0
192
+ };
193
+ }
194
+ const record = item;
195
+ return {
196
+ id: String(record.id ?? ""),
197
+ createdAt: typeof record.createdAt === "string" ? record.createdAt : void 0,
198
+ status: typeof record.status === "string" ? record.status : void 0,
199
+ size: typeof record.size === "number" ? record.size : void 0,
200
+ instanceId: typeof record.instanceId === "string" ? record.instanceId : void 0,
201
+ insights: parseInsights(record.insights),
202
+ metadata: record
203
+ };
204
+ }) : Array.isArray(raw) ? raw.map((item) => {
205
+ if (!item || typeof item !== "object") {
206
+ return {
207
+ id: "",
208
+ createdAt: void 0,
209
+ status: void 0,
210
+ size: void 0,
211
+ instanceId: void 0,
212
+ insights: void 0,
213
+ metadata: void 0
214
+ };
215
+ }
216
+ const record = item;
217
+ return {
218
+ id: String(record.id ?? ""),
219
+ createdAt: typeof record.createdAt === "string" ? record.createdAt : void 0,
220
+ status: typeof record.status === "string" ? record.status : void 0,
221
+ size: typeof record.size === "number" ? record.size : void 0,
222
+ instanceId: typeof record.instanceId === "string" ? record.instanceId : void 0,
223
+ insights: parseInsights(record.insights),
224
+ metadata: record
225
+ };
226
+ }) : [];
227
+ const totalCount = (() => {
228
+ if (rawRecord) {
229
+ if (typeof rawRecord.totalCount === "number" && Number.isFinite(rawRecord.totalCount)) {
230
+ return rawRecord.totalCount;
231
+ }
232
+ if (Array.isArray(rawRecord.supportBundles)) {
233
+ return rawRecord.supportBundles.length;
234
+ }
235
+ }
236
+ if (Array.isArray(raw)) {
237
+ return raw.length;
238
+ }
239
+ return bundles.length;
240
+ })();
241
+ return {
242
+ bundles,
243
+ totalCount,
244
+ raw
245
+ };
246
+ }
247
+ });
248
+ var UploadIcon = (props) => /* @__PURE__ */ jsxRuntime.jsxs(
249
+ "svg",
250
+ {
251
+ xmlns: "http://www.w3.org/2000/svg",
252
+ viewBox: "0 0 24 24",
253
+ fill: "none",
254
+ stroke: "currentColor",
255
+ strokeWidth: 1.5,
256
+ "aria-hidden": "true",
257
+ ...props,
258
+ children: [
259
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 16V3" }),
260
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M8 7l4-4 4 4" }),
261
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M5 21h14" })
262
+ ]
263
+ }
264
+ );
265
+ var baseCardClass = "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)]";
266
+ var headingClass = "text-lg font-semibold text-gray-900";
267
+ var contentClass = "mt-4 flex-1 space-y-3";
268
+ var itemClass = "flex items-center gap-3 text-sm text-gray-600";
269
+ var iconClass = "h-5 w-5 text-gray-500";
270
+ var footerClass = "mt-6 flex justify-end text-sm font-semibold text-primary hover:text-primary/80";
271
+ var SupportCard = async () => {
272
+ let totalCount = null;
273
+ try {
274
+ const headersModule = await import('next/headers');
275
+ const store = await headersModule.cookies();
276
+ const session = store.get("portal_session");
277
+ const token = session?.value;
278
+ if (token) {
279
+ const result = await listSupportBundles.run({ token });
280
+ totalCount = result.totalCount;
281
+ } else {
282
+ console.debug("[portal-components] no portal_session token for support bundles");
283
+ }
284
+ } catch (error) {
285
+ if (isRedirectError(error)) {
286
+ throw error;
287
+ }
288
+ console.error("[portal-components] support bundles fetch failed", error);
289
+ }
290
+ return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: baseCardClass, "aria-labelledby": "support-card-heading", children: [
291
+ /* @__PURE__ */ jsxRuntime.jsx("header", { children: /* @__PURE__ */ jsxRuntime.jsx("h2", { id: "support-card-heading", className: headingClass, children: "Support" }) }),
292
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: contentClass, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: itemClass, children: [
293
+ /* @__PURE__ */ jsxRuntime.jsx(UploadIcon, { className: iconClass }),
294
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
295
+ "Support bundles uploaded (",
296
+ totalCount ?? 0,
297
+ ")"
298
+ ] })
299
+ ] }) }),
300
+ /* @__PURE__ */ jsxRuntime.jsx("footer", { className: footerClass, children: /* @__PURE__ */ jsxRuntime.jsx("a", { href: "/support", className: "inline-flex items-center gap-1", children: "View support guide \u2192" }) })
301
+ ] });
302
+ };
303
+ SupportCard.displayName = "SupportCard";
304
+
305
+ exports.SupportCard = SupportCard;
306
+ //# sourceMappingURL=support-card.js.map
307
+ //# sourceMappingURL=support-card.js.map