@massdriver/backstage-plugin 1.0.0

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 (346) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +196 -0
  3. package/dist/MassdriverRouter.esm.js +78 -0
  4. package/dist/MassdriverRouter.esm.js.map +1 -0
  5. package/dist/api.esm.js +119 -0
  6. package/dist/api.esm.js.map +1 -0
  7. package/dist/assets/massdriver-logo-dark.svg +55 -0
  8. package/dist/assets/massdriver-logo-light.svg +50 -0
  9. package/dist/components/AttributesColumn.esm.js +95 -0
  10. package/dist/components/AttributesColumn.esm.js.map +1 -0
  11. package/dist/components/AttributesSummaryCell.esm.js +103 -0
  12. package/dist/components/AttributesSummaryCell.esm.js.map +1 -0
  13. package/dist/components/AuthedIcon.esm.js +26 -0
  14. package/dist/components/AuthedIcon.esm.js.map +1 -0
  15. package/dist/components/ConditionsCell.esm.js +48 -0
  16. package/dist/components/ConditionsCell.esm.js.map +1 -0
  17. package/dist/components/DisabledAction.esm.js +30 -0
  18. package/dist/components/DisabledAction.esm.js.map +1 -0
  19. package/dist/components/EntityMassdriverContent/EntityMassdriverContent.esm.js +80 -0
  20. package/dist/components/EntityMassdriverContent/EntityMassdriverContent.esm.js.map +1 -0
  21. package/dist/components/EntityMassdriverContent/index.esm.js +6 -0
  22. package/dist/components/EntityMassdriverContent/index.esm.js.map +1 -0
  23. package/dist/components/EntityMassdriverOverviewCard/EntityMassdriverOverviewCard.esm.js +75 -0
  24. package/dist/components/EntityMassdriverOverviewCard/EntityMassdriverOverviewCard.esm.js.map +1 -0
  25. package/dist/components/EntityMassdriverOverviewCard/index.esm.js +6 -0
  26. package/dist/components/EntityMassdriverOverviewCard/index.esm.js.map +1 -0
  27. package/dist/components/ForkPill.esm.js +84 -0
  28. package/dist/components/ForkPill.esm.js.map +1 -0
  29. package/dist/components/InstanceStatusIndicator.esm.js +21 -0
  30. package/dist/components/InstanceStatusIndicator.esm.js.map +1 -0
  31. package/dist/components/InstanceStatusPill.esm.js +67 -0
  32. package/dist/components/InstanceStatusPill.esm.js.map +1 -0
  33. package/dist/components/MassdriverIcon.esm.js +13 -0
  34. package/dist/components/MassdriverIcon.esm.js.map +1 -0
  35. package/dist/components/MassdriverSidebarItem.esm.js +45 -0
  36. package/dist/components/MassdriverSidebarItem.esm.js.map +1 -0
  37. package/dist/components/NotFound.esm.js +44 -0
  38. package/dist/components/NotFound.esm.js.map +1 -0
  39. package/dist/components/OpenInMassdriverButton.esm.js +24 -0
  40. package/dist/components/OpenInMassdriverButton.esm.js.map +1 -0
  41. package/dist/components/PageLayout.esm.js +88 -0
  42. package/dist/components/PageLayout.esm.js.map +1 -0
  43. package/dist/components/RouterLinkAdapter.esm.js +12 -0
  44. package/dist/components/RouterLinkAdapter.esm.js.map +1 -0
  45. package/dist/components/VersionBadge.esm.js +57 -0
  46. package/dist/components/VersionBadge.esm.js.map +1 -0
  47. package/dist/components/grantColumns.esm.js +56 -0
  48. package/dist/components/grantColumns.esm.js.map +1 -0
  49. package/dist/components/icons/BundleIcon.esm.js +7 -0
  50. package/dist/components/icons/BundleIcon.esm.js.map +1 -0
  51. package/dist/components/icons/FolderOutlinedIcon.esm.js +7 -0
  52. package/dist/components/icons/FolderOutlinedIcon.esm.js.map +1 -0
  53. package/dist/components/icons/TokenIcon.esm.js +7 -0
  54. package/dist/components/icons/TokenIcon.esm.js.map +1 -0
  55. package/dist/entity.esm.js +23 -0
  56. package/dist/entity.esm.js.map +1 -0
  57. package/dist/features/environment/CompareDeploymentsDialog/CompareDeploymentsDialog.esm.js +115 -0
  58. package/dist/features/environment/CompareDeploymentsDialog/CompareDeploymentsDialog.esm.js.map +1 -0
  59. package/dist/features/environment/CompareDeploymentsDialog/ResultsStep.esm.js +165 -0
  60. package/dist/features/environment/CompareDeploymentsDialog/ResultsStep.esm.js.map +1 -0
  61. package/dist/features/environment/CompareDeploymentsDialog/SelectStep.esm.js +216 -0
  62. package/dist/features/environment/CompareDeploymentsDialog/SelectStep.esm.js.map +1 -0
  63. package/dist/features/environment/CompareDeploymentsDialog/compareColumns.esm.js +86 -0
  64. package/dist/features/environment/CompareDeploymentsDialog/compareColumns.esm.js.map +1 -0
  65. package/dist/features/environment/CompareDeploymentsDialog/flattenDeploymentComparison.esm.js +57 -0
  66. package/dist/features/environment/CompareDeploymentsDialog/flattenDeploymentComparison.esm.js.map +1 -0
  67. package/dist/features/environment/CompareDeploymentsDialog/queries.esm.js +53 -0
  68. package/dist/features/environment/CompareDeploymentsDialog/queries.esm.js.map +1 -0
  69. package/dist/features/environment/CompareEnvironmentsDialog/CompareEnvironmentsDialog.esm.js +94 -0
  70. package/dist/features/environment/CompareEnvironmentsDialog/CompareEnvironmentsDialog.esm.js.map +1 -0
  71. package/dist/features/environment/CompareEnvironmentsDialog/ComparisonValueCell.esm.js +67 -0
  72. package/dist/features/environment/CompareEnvironmentsDialog/ComparisonValueCell.esm.js.map +1 -0
  73. package/dist/features/environment/CompareEnvironmentsDialog/ResultsStep.esm.js +202 -0
  74. package/dist/features/environment/CompareEnvironmentsDialog/ResultsStep.esm.js.map +1 -0
  75. package/dist/features/environment/CompareEnvironmentsDialog/SelectStep.esm.js +183 -0
  76. package/dist/features/environment/CompareEnvironmentsDialog/SelectStep.esm.js.map +1 -0
  77. package/dist/features/environment/CompareEnvironmentsDialog/compareColumns.esm.js +73 -0
  78. package/dist/features/environment/CompareEnvironmentsDialog/compareColumns.esm.js.map +1 -0
  79. package/dist/features/environment/CompareEnvironmentsDialog/flattenComparison.esm.js +70 -0
  80. package/dist/features/environment/CompareEnvironmentsDialog/flattenComparison.esm.js.map +1 -0
  81. package/dist/features/environment/CompareEnvironmentsDialog/queries.esm.js +32 -0
  82. package/dist/features/environment/CompareEnvironmentsDialog/queries.esm.js.map +1 -0
  83. package/dist/features/environment/EnvironmentGraphPage.esm.js +131 -0
  84. package/dist/features/environment/EnvironmentGraphPage.esm.js.map +1 -0
  85. package/dist/features/environment/GraphHeader/EnvironmentDefaults.esm.js +252 -0
  86. package/dist/features/environment/GraphHeader/EnvironmentDefaults.esm.js.map +1 -0
  87. package/dist/features/environment/GraphHeader/GraphHeader.esm.js +247 -0
  88. package/dist/features/environment/GraphHeader/GraphHeader.esm.js.map +1 -0
  89. package/dist/features/environment/GraphHeader/HeaderActions.esm.js +127 -0
  90. package/dist/features/environment/GraphHeader/HeaderActions.esm.js.map +1 -0
  91. package/dist/features/environment/GraphHeader/Switcher.esm.js +75 -0
  92. package/dist/features/environment/GraphHeader/Switcher.esm.js.map +1 -0
  93. package/dist/features/environment/GraphHeader/queries.esm.js +60 -0
  94. package/dist/features/environment/GraphHeader/queries.esm.js.map +1 -0
  95. package/dist/features/environment/InstanceDrawer/AlarmCard.esm.js +151 -0
  96. package/dist/features/environment/InstanceDrawer/AlarmCard.esm.js.map +1 -0
  97. package/dist/features/environment/InstanceDrawer/InstanceDrawer.esm.js +165 -0
  98. package/dist/features/environment/InstanceDrawer/InstanceDrawer.esm.js.map +1 -0
  99. package/dist/features/environment/InstanceDrawer/InstanceDrawerHeader.esm.js +241 -0
  100. package/dist/features/environment/InstanceDrawer/InstanceDrawerHeader.esm.js.map +1 -0
  101. package/dist/features/environment/InstanceDrawer/InstanceTabs.esm.js +119 -0
  102. package/dist/features/environment/InstanceDrawer/InstanceTabs.esm.js.map +1 -0
  103. package/dist/features/environment/InstanceDrawer/TabState.esm.js +30 -0
  104. package/dist/features/environment/InstanceDrawer/TabState.esm.js.map +1 -0
  105. package/dist/features/environment/InstanceDrawer/formsDataSource.esm.js +25 -0
  106. package/dist/features/environment/InstanceDrawer/formsDataSource.esm.js.map +1 -0
  107. package/dist/features/environment/InstanceDrawer/helpers.esm.js +282 -0
  108. package/dist/features/environment/InstanceDrawer/helpers.esm.js.map +1 -0
  109. package/dist/features/environment/InstanceDrawer/queries.esm.js +281 -0
  110. package/dist/features/environment/InstanceDrawer/queries.esm.js.map +1 -0
  111. package/dist/features/environment/InstanceDrawer/tabs/ConfigTab.esm.js +170 -0
  112. package/dist/features/environment/InstanceDrawer/tabs/ConfigTab.esm.js.map +1 -0
  113. package/dist/features/environment/InstanceDrawer/tabs/DependenciesTab.esm.js +413 -0
  114. package/dist/features/environment/InstanceDrawer/tabs/DependenciesTab.esm.js.map +1 -0
  115. package/dist/features/environment/InstanceDrawer/tabs/DeploymentLogsPanel.esm.js +191 -0
  116. package/dist/features/environment/InstanceDrawer/tabs/DeploymentLogsPanel.esm.js.map +1 -0
  117. package/dist/features/environment/InstanceDrawer/tabs/DeploymentReadOnlyActions.esm.js +63 -0
  118. package/dist/features/environment/InstanceDrawer/tabs/DeploymentReadOnlyActions.esm.js.map +1 -0
  119. package/dist/features/environment/InstanceDrawer/tabs/GuideTab.esm.js +48 -0
  120. package/dist/features/environment/InstanceDrawer/tabs/GuideTab.esm.js.map +1 -0
  121. package/dist/features/environment/InstanceDrawer/tabs/HistoryTab.esm.js +446 -0
  122. package/dist/features/environment/InstanceDrawer/tabs/HistoryTab.esm.js.map +1 -0
  123. package/dist/features/environment/InstanceDrawer/tabs/MonitorTab.esm.js +146 -0
  124. package/dist/features/environment/InstanceDrawer/tabs/MonitorTab.esm.js.map +1 -0
  125. package/dist/features/environment/InstanceDrawer/tabs/OverviewTab.esm.js +572 -0
  126. package/dist/features/environment/InstanceDrawer/tabs/OverviewTab.esm.js.map +1 -0
  127. package/dist/features/environment/InstanceDrawer/tabs/ResourcesTab.esm.js +471 -0
  128. package/dist/features/environment/InstanceDrawer/tabs/ResourcesTab.esm.js.map +1 -0
  129. package/dist/features/environment/InstanceDrawer/tabs/SecretsTab.esm.js +109 -0
  130. package/dist/features/environment/InstanceDrawer/tabs/SecretsTab.esm.js.map +1 -0
  131. package/dist/features/environment/InstanceDrawer/tabs/ViewDeploymentDetails.esm.js +384 -0
  132. package/dist/features/environment/InstanceDrawer/tabs/ViewDeploymentDetails.esm.js.map +1 -0
  133. package/dist/features/environment/InstanceDrawer/tabs/flattenParams.esm.js +23 -0
  134. package/dist/features/environment/InstanceDrawer/tabs/flattenParams.esm.js.map +1 -0
  135. package/dist/features/environment/InstanceDrawer/useInstanceApiQuery.esm.js +6 -0
  136. package/dist/features/environment/InstanceDrawer/useInstanceApiQuery.esm.js.map +1 -0
  137. package/dist/features/environment/InstanceDrawer/useOverflowMeasure.esm.js +55 -0
  138. package/dist/features/environment/InstanceDrawer/useOverflowMeasure.esm.js.map +1 -0
  139. package/dist/features/environment/InstanceDrawer/useResizableWidth.esm.js +44 -0
  140. package/dist/features/environment/InstanceDrawer/useResizableWidth.esm.js.map +1 -0
  141. package/dist/features/environment/components/InstanceStatusPill.esm.js +54 -0
  142. package/dist/features/environment/components/InstanceStatusPill.esm.js.map +1 -0
  143. package/dist/features/environment/graph/Diagram.esm.js +143 -0
  144. package/dist/features/environment/graph/Diagram.esm.js.map +1 -0
  145. package/dist/features/environment/graph/DiagramNode.constants.esm.js +5 -0
  146. package/dist/features/environment/graph/DiagramNode.constants.esm.js.map +1 -0
  147. package/dist/features/environment/graph/DiagramNode.esm.js +221 -0
  148. package/dist/features/environment/graph/DiagramNode.esm.js.map +1 -0
  149. package/dist/features/environment/graph/NodeMeta.esm.js +182 -0
  150. package/dist/features/environment/graph/NodeMeta.esm.js.map +1 -0
  151. package/dist/features/environment/graph/NodeVersionBadges.esm.js +150 -0
  152. package/dist/features/environment/graph/NodeVersionBadges.esm.js.map +1 -0
  153. package/dist/features/environment/graph/diagramFactory.esm.js +151 -0
  154. package/dist/features/environment/graph/diagramFactory.esm.js.map +1 -0
  155. package/dist/features/environment/graph/handles/ExpandableHandleWrapper.esm.js +174 -0
  156. package/dist/features/environment/graph/handles/ExpandableHandleWrapper.esm.js.map +1 -0
  157. package/dist/features/environment/graph/handles/NodeHandle.esm.js +45 -0
  158. package/dist/features/environment/graph/handles/NodeHandle.esm.js.map +1 -0
  159. package/dist/features/environment/graph/handles/NodeHandleTooltip.esm.js +134 -0
  160. package/dist/features/environment/graph/handles/NodeHandleTooltip.esm.js.map +1 -0
  161. package/dist/features/environment/graph/handles/handleTypes.esm.js +170 -0
  162. package/dist/features/environment/graph/handles/handleTypes.esm.js.map +1 -0
  163. package/dist/features/environment/graph/handles/useAnimationFrameSync.esm.js +19 -0
  164. package/dist/features/environment/graph/handles/useAnimationFrameSync.esm.js.map +1 -0
  165. package/dist/features/environment/graph/handles/useRadialPositions.esm.js +37 -0
  166. package/dist/features/environment/graph/handles/useRadialPositions.esm.js.map +1 -0
  167. package/dist/features/environment/graph/handles/useTransitionLifecycle.esm.js +19 -0
  168. package/dist/features/environment/graph/handles/useTransitionLifecycle.esm.js.map +1 -0
  169. package/dist/features/environment/graph/hasUndeployedPlan.esm.js +43 -0
  170. package/dist/features/environment/graph/hasUndeployedPlan.esm.js.map +1 -0
  171. package/dist/features/environment/graph/queries.esm.js +103 -0
  172. package/dist/features/environment/graph/queries.esm.js.map +1 -0
  173. package/dist/features/environment/graph/useDiagramSnapshot.esm.js +43 -0
  174. package/dist/features/environment/graph/useDiagramSnapshot.esm.js.map +1 -0
  175. package/dist/features/environment/realtime/RealtimeProvider.esm.js +43 -0
  176. package/dist/features/environment/realtime/RealtimeProvider.esm.js.map +1 -0
  177. package/dist/features/environment/realtime/queries.esm.js +76 -0
  178. package/dist/features/environment/realtime/queries.esm.js.map +1 -0
  179. package/dist/features/environment/realtime/useLiveRelayQuery.esm.js +36 -0
  180. package/dist/features/environment/realtime/useLiveRelayQuery.esm.js.map +1 -0
  181. package/dist/features/project/ProjectDetailsPage.esm.js +101 -0
  182. package/dist/features/project/ProjectDetailsPage.esm.js.map +1 -0
  183. package/dist/features/project/tabs/ComponentsTab.esm.js +149 -0
  184. package/dist/features/project/tabs/ComponentsTab.esm.js.map +1 -0
  185. package/dist/features/project/tabs/EnvStatus.esm.js +149 -0
  186. package/dist/features/project/tabs/EnvStatus.esm.js.map +1 -0
  187. package/dist/features/project/tabs/EnvironmentsTab.esm.js +199 -0
  188. package/dist/features/project/tabs/EnvironmentsTab.esm.js.map +1 -0
  189. package/dist/features/project/tabs/OverviewTab.esm.js +420 -0
  190. package/dist/features/project/tabs/OverviewTab.esm.js.map +1 -0
  191. package/dist/features/projects/ProjectsListPage.esm.js +50 -0
  192. package/dist/features/projects/ProjectsListPage.esm.js.map +1 -0
  193. package/dist/features/projects/ProjectsListPageLazy.esm.js +12 -0
  194. package/dist/features/projects/ProjectsListPageLazy.esm.js.map +1 -0
  195. package/dist/features/projects/projectColumns.esm.js +38 -0
  196. package/dist/features/projects/projectColumns.esm.js.map +1 -0
  197. package/dist/features/projects/useProjects.esm.js +48 -0
  198. package/dist/features/projects/useProjects.esm.js.map +1 -0
  199. package/dist/features/repo/DeploymentLogsDrawer.esm.js +213 -0
  200. package/dist/features/repo/DeploymentLogsDrawer.esm.js.map +1 -0
  201. package/dist/features/repo/DeploymentLogsDrawer.loading.esm.js +43 -0
  202. package/dist/features/repo/DeploymentLogsDrawer.loading.esm.js.map +1 -0
  203. package/dist/features/repo/FileTree.esm.js +179 -0
  204. package/dist/features/repo/FileTree.esm.js.map +1 -0
  205. package/dist/features/repo/FileViewer.esm.js +115 -0
  206. package/dist/features/repo/FileViewer.esm.js.map +1 -0
  207. package/dist/features/repo/FileViewer.helpers.esm.js +54 -0
  208. package/dist/features/repo/FileViewer.helpers.esm.js.map +1 -0
  209. package/dist/features/repo/RepoDetailsPage.esm.js +127 -0
  210. package/dist/features/repo/RepoDetailsPage.esm.js.map +1 -0
  211. package/dist/features/repo/RepoEmptyState.esm.js +58 -0
  212. package/dist/features/repo/RepoEmptyState.esm.js.map +1 -0
  213. package/dist/features/repo/RepoNoVersionsState.esm.js +29 -0
  214. package/dist/features/repo/RepoNoVersionsState.esm.js.map +1 -0
  215. package/dist/features/repo/RepoTabHeader.esm.js +30 -0
  216. package/dist/features/repo/RepoTabHeader.esm.js.map +1 -0
  217. package/dist/features/repo/RepoTabLayout.esm.js +18 -0
  218. package/dist/features/repo/RepoTabLayout.esm.js.map +1 -0
  219. package/dist/features/repo/RepoVersionSelect.esm.js +176 -0
  220. package/dist/features/repo/RepoVersionSelect.esm.js.map +1 -0
  221. package/dist/features/repo/ViewDeploymentDetailsDialog.esm.js +427 -0
  222. package/dist/features/repo/ViewDeploymentDetailsDialog.esm.js.map +1 -0
  223. package/dist/features/repo/deploymentHelpers.esm.js +74 -0
  224. package/dist/features/repo/deploymentHelpers.esm.js.map +1 -0
  225. package/dist/features/repo/fileTreeHelpers.esm.js +45 -0
  226. package/dist/features/repo/fileTreeHelpers.esm.js.map +1 -0
  227. package/dist/features/repo/flattenParams.esm.js +23 -0
  228. package/dist/features/repo/flattenParams.esm.js.map +1 -0
  229. package/dist/features/repo/queries.esm.js +239 -0
  230. package/dist/features/repo/queries.esm.js.map +1 -0
  231. package/dist/features/repo/repoFilter.esm.js +9 -0
  232. package/dist/features/repo/repoFilter.esm.js.map +1 -0
  233. package/dist/features/repo/repoTabs.esm.js +22 -0
  234. package/dist/features/repo/repoTabs.esm.js.map +1 -0
  235. package/dist/features/repo/resolveVersion.esm.js +22 -0
  236. package/dist/features/repo/resolveVersion.esm.js.map +1 -0
  237. package/dist/features/repo/tabs/DeploymentRow.esm.js +201 -0
  238. package/dist/features/repo/tabs/DeploymentRow.esm.js.map +1 -0
  239. package/dist/features/repo/tabs/DeploymentsTab.esm.js +188 -0
  240. package/dist/features/repo/tabs/DeploymentsTab.esm.js.map +1 -0
  241. package/dist/features/repo/tabs/DeploymentsTab.helpers.esm.js +46 -0
  242. package/dist/features/repo/tabs/DeploymentsTab.helpers.esm.js.map +1 -0
  243. package/dist/features/repo/tabs/DeploymentsTab.loading.esm.js +37 -0
  244. package/dist/features/repo/tabs/DeploymentsTab.loading.esm.js.map +1 -0
  245. package/dist/features/repo/tabs/FilesTab.esm.js +142 -0
  246. package/dist/features/repo/tabs/FilesTab.esm.js.map +1 -0
  247. package/dist/features/repo/tabs/InstanceRow.esm.js +121 -0
  248. package/dist/features/repo/tabs/InstanceRow.esm.js.map +1 -0
  249. package/dist/features/repo/tabs/InstancesTab.esm.js +147 -0
  250. package/dist/features/repo/tabs/InstancesTab.esm.js.map +1 -0
  251. package/dist/features/repo/tabs/InstancesTab.helpers.esm.js +44 -0
  252. package/dist/features/repo/tabs/InstancesTab.helpers.esm.js.map +1 -0
  253. package/dist/features/repo/tabs/InstancesTab.loading.esm.js +33 -0
  254. package/dist/features/repo/tabs/InstancesTab.loading.esm.js.map +1 -0
  255. package/dist/features/repo/tabs/OverviewTab.esm.js +77 -0
  256. package/dist/features/repo/tabs/OverviewTab.esm.js.map +1 -0
  257. package/dist/features/repo/tabs/PermissionsTab.esm.js +56 -0
  258. package/dist/features/repo/tabs/PermissionsTab.esm.js.map +1 -0
  259. package/dist/features/repo/tabs/VersionsTab.esm.js +152 -0
  260. package/dist/features/repo/tabs/VersionsTab.esm.js.map +1 -0
  261. package/dist/features/repo/useInfiniteRelayList.esm.js +92 -0
  262. package/dist/features/repo/useInfiniteRelayList.esm.js.map +1 -0
  263. package/dist/features/repo/useInfiniteScroll.esm.js +21 -0
  264. package/dist/features/repo/useInfiniteScroll.esm.js.map +1 -0
  265. package/dist/features/repos/ReposListPage.esm.js +53 -0
  266. package/dist/features/repos/ReposListPage.esm.js.map +1 -0
  267. package/dist/features/repos/queries.esm.js +40 -0
  268. package/dist/features/repos/queries.esm.js.map +1 -0
  269. package/dist/features/repos/repoColumns.esm.js +121 -0
  270. package/dist/features/repos/repoColumns.esm.js.map +1 -0
  271. package/dist/features/repos/useRepos.esm.js +22 -0
  272. package/dist/features/repos/useRepos.esm.js.map +1 -0
  273. package/dist/features/resource/OriginChip.esm.js +42 -0
  274. package/dist/features/resource/OriginChip.esm.js.map +1 -0
  275. package/dist/features/resource/ResourceDetailsPage.esm.js +167 -0
  276. package/dist/features/resource/ResourceDetailsPage.esm.js.map +1 -0
  277. package/dist/features/resource/queries.esm.js +141 -0
  278. package/dist/features/resource/queries.esm.js.map +1 -0
  279. package/dist/features/resource/tabs/GeneralTab.esm.js +247 -0
  280. package/dist/features/resource/tabs/GeneralTab.esm.js.map +1 -0
  281. package/dist/features/resource/tabs/GeneralTab.loading.esm.js +76 -0
  282. package/dist/features/resource/tabs/GeneralTab.loading.esm.js.map +1 -0
  283. package/dist/features/resource/tabs/PermissionsTab.esm.js +57 -0
  284. package/dist/features/resource/tabs/PermissionsTab.esm.js.map +1 -0
  285. package/dist/features/resource/tabs/SettingsTabLayout.esm.js +18 -0
  286. package/dist/features/resource/tabs/SettingsTabLayout.esm.js.map +1 -0
  287. package/dist/features/resource/tabs/TabHeader.esm.js +30 -0
  288. package/dist/features/resource/tabs/TabHeader.esm.js.map +1 -0
  289. package/dist/features/resource/tabs/UsagePanel.esm.js +35 -0
  290. package/dist/features/resource/tabs/UsagePanel.esm.js.map +1 -0
  291. package/dist/features/resource/tabs/UsageTab.esm.js +91 -0
  292. package/dist/features/resource/tabs/UsageTab.esm.js.map +1 -0
  293. package/dist/features/resource/tabs/UsageTab.helpers.esm.js +168 -0
  294. package/dist/features/resource/tabs/UsageTab.helpers.esm.js.map +1 -0
  295. package/dist/features/resources/ResourcesEmptyState.esm.js +148 -0
  296. package/dist/features/resources/ResourcesEmptyState.esm.js.map +1 -0
  297. package/dist/features/resources/ResourcesListPage.esm.js +115 -0
  298. package/dist/features/resources/ResourcesListPage.esm.js.map +1 -0
  299. package/dist/features/resources/queries.esm.js +50 -0
  300. package/dist/features/resources/queries.esm.js.map +1 -0
  301. package/dist/features/resources/resourceColumns.esm.js +158 -0
  302. package/dist/features/resources/resourceColumns.esm.js.map +1 -0
  303. package/dist/features/resources/resourceConstants.esm.js +7 -0
  304. package/dist/features/resources/resourceConstants.esm.js.map +1 -0
  305. package/dist/features/resources/toResourceRow.esm.js +29 -0
  306. package/dist/features/resources/toResourceRow.esm.js.map +1 -0
  307. package/dist/hooks/useAuthedSvg.esm.js +34 -0
  308. package/dist/hooks/useAuthedSvg.esm.js.map +1 -0
  309. package/dist/hooks/useCursorPagination.esm.js +40 -0
  310. package/dist/hooks/useCursorPagination.esm.js.map +1 -0
  311. package/dist/hooks/useMassdriverSubscription.esm.js +61 -0
  312. package/dist/hooks/useMassdriverSubscription.esm.js.map +1 -0
  313. package/dist/hooks/usePaginatedRelayQuery.esm.js +68 -0
  314. package/dist/hooks/usePaginatedRelayQuery.esm.js.map +1 -0
  315. package/dist/index.d.ts +256 -0
  316. package/dist/index.esm.js +8 -0
  317. package/dist/index.esm.js.map +1 -0
  318. package/dist/internalRoutes.esm.js +29 -0
  319. package/dist/internalRoutes.esm.js.map +1 -0
  320. package/dist/plugin.esm.js +57 -0
  321. package/dist/plugin.esm.js.map +1 -0
  322. package/dist/queries.esm.js +54 -0
  323. package/dist/queries.esm.js.map +1 -0
  324. package/dist/routes.esm.js +6 -0
  325. package/dist/routes.esm.js.map +1 -0
  326. package/dist/shell/MassdriverHeader.esm.js +37 -0
  327. package/dist/shell/MassdriverHeader.esm.js.map +1 -0
  328. package/dist/shell/MassdriverShell.esm.js +30 -0
  329. package/dist/shell/MassdriverShell.esm.js.map +1 -0
  330. package/dist/theme/MassdriverThemeScope.esm.js +30 -0
  331. package/dist/theme/MassdriverThemeScope.esm.js.map +1 -0
  332. package/dist/theme/ThemeModeContext.esm.js +35 -0
  333. package/dist/theme/ThemeModeContext.esm.js.map +1 -0
  334. package/dist/theme/muiClassNameAudit.esm.js +11 -0
  335. package/dist/theme/muiClassNameAudit.esm.js.map +1 -0
  336. package/dist/useInstances.esm.js +39 -0
  337. package/dist/useInstances.esm.js.map +1 -0
  338. package/dist/utils/attributes.esm.js +28 -0
  339. package/dist/utils/attributes.esm.js.map +1 -0
  340. package/dist/utils/conditions.esm.js +20 -0
  341. package/dist/utils/conditions.esm.js.map +1 -0
  342. package/dist/utils/formatRelativeTime.esm.js +40 -0
  343. package/dist/utils/formatRelativeTime.esm.js.map +1 -0
  344. package/dist/utils/instanceStatuses.esm.js +74 -0
  345. package/dist/utils/instanceStatuses.esm.js.map +1 -0
  346. package/package.json +92 -0
@@ -0,0 +1,23 @@
1
+ const flattenParams = (params, basePath = "") => {
2
+ if (basePath === "" && params == null) return [];
3
+ if (params === null || typeof params !== "object") {
4
+ return [{ id: basePath || "$", path: basePath || "$", value: params }];
5
+ }
6
+ if (Array.isArray(params)) {
7
+ if (params.length === 0) {
8
+ return [{ id: basePath || "$", path: basePath || "$", value: [] }];
9
+ }
10
+ return params.flatMap(
11
+ (item, index) => flattenParams(item, `${basePath}[${index}]`)
12
+ );
13
+ }
14
+ const record = params;
15
+ const keys = Object.keys(record);
16
+ if (keys.length === 0) {
17
+ return [{ id: basePath || "$", path: basePath || "$", value: {} }];
18
+ }
19
+ return keys.flatMap((key) => flattenParams(record[key], `${basePath}.${key}`));
20
+ };
21
+
22
+ export { flattenParams as default };
23
+ //# sourceMappingURL=flattenParams.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flattenParams.esm.js","sources":["../../../src/features/repo/flattenParams.ts"],"sourcesContent":["// Walks a JSON object/array recursively and yields one row per leaf value.\n// Leaf rows have jq-style paths (e.g. `.database.port`, `.containers[0].image`).\n// Ported verbatim from the web app's\n// apps/web/shared/components/ViewDeploymentDetailsDialog/flattenParams.js (the\n// same copy features/environment ported for its instance-drawer details panel).\nexport interface ParamRow {\n id: string;\n path: string;\n value: unknown;\n}\n\nconst flattenParams = (params: unknown, basePath = ''): ParamRow[] => {\n if (basePath === '' && params == null) return [];\n if (params === null || typeof params !== 'object') {\n return [{ id: basePath || '$', path: basePath || '$', value: params }];\n }\n if (Array.isArray(params)) {\n if (params.length === 0) {\n return [{ id: basePath || '$', path: basePath || '$', value: [] }];\n }\n return params.flatMap((item, index) =>\n flattenParams(item, `${basePath}[${index}]`),\n );\n }\n const record = params as Record<string, unknown>;\n const keys = Object.keys(record);\n if (keys.length === 0) {\n return [{ id: basePath || '$', path: basePath || '$', value: {} }];\n }\n return keys.flatMap(key => flattenParams(record[key], `${basePath}.${key}`));\n};\n\nexport default flattenParams;\n"],"names":[],"mappings":"AAWA,MAAM,aAAA,GAAgB,CAAC,MAAA,EAAiB,QAAA,GAAW,EAAA,KAAmB;AACpE,EAAA,IAAI,QAAA,KAAa,EAAA,IAAM,MAAA,IAAU,IAAA,SAAa,EAAC;AAC/C,EAAA,IAAI,MAAA,KAAW,IAAA,IAAQ,OAAO,MAAA,KAAW,QAAA,EAAU;AACjD,IAAA,OAAO,CAAC,EAAE,EAAA,EAAI,QAAA,IAAY,GAAA,EAAK,MAAM,QAAA,IAAY,GAAA,EAAK,KAAA,EAAO,MAAA,EAAQ,CAAA;AAAA,EACvE;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AACzB,IAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,MAAA,OAAO,CAAC,EAAE,EAAA,EAAI,QAAA,IAAY,GAAA,EAAK,IAAA,EAAM,QAAA,IAAY,GAAA,EAAK,KAAA,EAAO,EAAC,EAAG,CAAA;AAAA,IACnE;AACA,IAAA,OAAO,MAAA,CAAO,OAAA;AAAA,MAAQ,CAAC,MAAM,KAAA,KAC3B,aAAA,CAAc,MAAM,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,CAAG;AAAA,KAC7C;AAAA,EACF;AACA,EAAA,MAAM,MAAA,GAAS,MAAA;AACf,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA;AAC/B,EAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,IAAA,OAAO,CAAC,EAAE,EAAA,EAAI,QAAA,IAAY,GAAA,EAAK,IAAA,EAAM,QAAA,IAAY,GAAA,EAAK,KAAA,EAAO,EAAC,EAAG,CAAA;AAAA,EACnE;AACA,EAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,GAAA,KAAO,aAAA,CAAc,MAAA,CAAO,GAAG,CAAA,EAAG,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,CAAC,CAAA;AAC7E;;;;"}
@@ -0,0 +1,239 @@
1
+ const OCI_REPO_HEADER_QUERY = `
2
+ query MassdriverOciRepoHeader($organizationId: ID!, $id: ID!) {
3
+ ociRepo(organizationId: $organizationId, id: $id) {
4
+ id
5
+ name
6
+ description
7
+ icon
8
+ sourceUrl
9
+ readme
10
+ changelog
11
+ reference
12
+ attributes
13
+ createdAt
14
+ updatedAt
15
+ releaseChannels {
16
+ items {
17
+ name
18
+ tag
19
+ }
20
+ }
21
+ tags(sort: { field: VERSION, order: DESC }) {
22
+ items {
23
+ tag
24
+ createdAt
25
+ }
26
+ }
27
+ }
28
+ }
29
+ `;
30
+ const BUNDLE_QUERY = `
31
+ query MassdriverBundle($organizationId: ID!, $id: BundleId!) {
32
+ bundle(organizationId: $organizationId, id: $id) {
33
+ id
34
+ name
35
+ version
36
+ description
37
+ sourceUrl
38
+ readme
39
+ changelog
40
+ createdAt
41
+ updatedAt
42
+ }
43
+ }
44
+ `;
45
+ const REPO_INSTANCES_QUERY = `
46
+ query MassdriverRepoInstances(
47
+ $organizationId: ID!
48
+ $filter: InstancesFilter
49
+ $sort: InstancesSort
50
+ $cursor: Cursor
51
+ ) {
52
+ instances(
53
+ organizationId: $organizationId
54
+ filter: $filter
55
+ sort: $sort
56
+ cursor: $cursor
57
+ ) {
58
+ cursor {
59
+ next
60
+ }
61
+ items {
62
+ id
63
+ status
64
+ version
65
+ resolvedVersion
66
+ deployedVersion
67
+ createdAt
68
+ updatedAt
69
+ cost {
70
+ lastMonth {
71
+ amount
72
+ currency
73
+ }
74
+ }
75
+ environment {
76
+ id
77
+ name
78
+ }
79
+ component {
80
+ id
81
+ project {
82
+ id
83
+ name
84
+ }
85
+ }
86
+ }
87
+ }
88
+ }
89
+ `;
90
+ const REPO_DEPLOYMENTS_QUERY = `
91
+ query MassdriverRepoDeployments(
92
+ $organizationId: ID!
93
+ $filter: DeploymentsFilter
94
+ $sort: DeploymentsSort
95
+ $cursor: Cursor
96
+ ) {
97
+ deployments(
98
+ organizationId: $organizationId
99
+ filter: $filter
100
+ sort: $sort
101
+ cursor: $cursor
102
+ ) {
103
+ cursor {
104
+ next
105
+ }
106
+ items {
107
+ id
108
+ status
109
+ action
110
+ version
111
+ message
112
+ createdAt
113
+ updatedAt
114
+ lastTransitionedAt
115
+ elapsedTime
116
+ deployedBy
117
+ instance {
118
+ id
119
+ environment {
120
+ id
121
+ name
122
+ }
123
+ component {
124
+ id
125
+ project {
126
+ id
127
+ name
128
+ }
129
+ }
130
+ }
131
+ }
132
+ }
133
+ }
134
+ `;
135
+ const DEPLOYMENT_DETAIL_QUERY = `
136
+ query MassdriverDeployment($organizationId: ID!, $id: UUID!) {
137
+ deployment(organizationId: $organizationId, id: $id) {
138
+ id
139
+ status
140
+ action
141
+ version
142
+ message
143
+ params
144
+ effectiveAttributes
145
+ createdAt
146
+ lastTransitionedAt
147
+ elapsedTime
148
+ deployedBy
149
+ instance {
150
+ id
151
+ component { id name }
152
+ }
153
+ }
154
+ }
155
+ `;
156
+ const DEPLOYMENT_LOGS_QUERY = `
157
+ query MassdriverDeploymentLogs($organizationId: ID!, $id: UUID!) {
158
+ deployment(organizationId: $organizationId, id: $id) {
159
+ id
160
+ status
161
+ action
162
+ version
163
+ instance {
164
+ id
165
+ component { id name }
166
+ }
167
+ logs {
168
+ timestamp
169
+ message
170
+ }
171
+ }
172
+ }
173
+ `;
174
+ const DEPLOYMENT_LOGS_SUBSCRIPTION = `
175
+ subscription MassdriverDeploymentLogs(
176
+ $organizationId: ID!
177
+ $deploymentId: ID!
178
+ ) {
179
+ deploymentLogs(
180
+ organizationId: $organizationId
181
+ deploymentId: $deploymentId
182
+ ) {
183
+ timestamp
184
+ message
185
+ }
186
+ }
187
+ `;
188
+ const REPO_TAG_FILES_QUERY = `
189
+ query MassdriverRepoTagFiles(
190
+ $organizationId: ID!
191
+ $repoId: ID!
192
+ $version: Semver!
193
+ $cursor: Cursor
194
+ ) {
195
+ ociRepo(organizationId: $organizationId, id: $repoId) {
196
+ id
197
+ tags(filter: { version: $version }) {
198
+ items {
199
+ tag
200
+ files(sort: { field: NAME, order: ASC }, cursor: $cursor) {
201
+ cursor {
202
+ next
203
+ previous
204
+ }
205
+ items {
206
+ name
207
+ mediaType
208
+ size
209
+ digest
210
+ url
211
+ }
212
+ }
213
+ }
214
+ }
215
+ }
216
+ }
217
+ `;
218
+ const REPO_GRANTS_QUERY = `
219
+ query MassdriverRepoGrants($organizationId: ID!, $id: ID!, $cursor: Cursor) {
220
+ ociRepo(organizationId: $organizationId, id: $id) {
221
+ id
222
+ grants(cursor: $cursor) {
223
+ cursor {
224
+ next
225
+ previous
226
+ }
227
+ items {
228
+ id
229
+ action
230
+ recipientConditions
231
+ createdAt
232
+ }
233
+ }
234
+ }
235
+ }
236
+ `;
237
+
238
+ export { BUNDLE_QUERY, DEPLOYMENT_DETAIL_QUERY, DEPLOYMENT_LOGS_QUERY, DEPLOYMENT_LOGS_SUBSCRIPTION, OCI_REPO_HEADER_QUERY, REPO_DEPLOYMENTS_QUERY, REPO_GRANTS_QUERY, REPO_INSTANCES_QUERY, REPO_TAG_FILES_QUERY };
239
+ //# sourceMappingURL=queries.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queries.esm.js","sources":["../../../src/features/repo/queries.ts"],"sourcesContent":["// Ported from apps/web/features/repos/ hooks. Operation names prefixed\n// `Massdriver`; `$organizationId` is declared but never passed (relay injects).\n\n// apps/web/features/repos/hooks/useOciRepoQuery.js\nexport const OCI_REPO_HEADER_QUERY = `\n query MassdriverOciRepoHeader($organizationId: ID!, $id: ID!) {\n ociRepo(organizationId: $organizationId, id: $id) {\n id\n name\n description\n icon\n sourceUrl\n readme\n changelog\n reference\n attributes\n createdAt\n updatedAt\n releaseChannels {\n items {\n name\n tag\n }\n }\n tags(sort: { field: VERSION, order: DESC }) {\n items {\n tag\n createdAt\n }\n }\n }\n }\n`;\n\n// apps/web/features/repos/hooks/useBundleQuery.js\nexport const BUNDLE_QUERY = `\n query MassdriverBundle($organizationId: ID!, $id: BundleId!) {\n bundle(organizationId: $organizationId, id: $id) {\n id\n name\n version\n description\n sourceUrl\n readme\n changelog\n createdAt\n updatedAt\n }\n }\n`;\n\n// apps/web/features/repos/hooks/queries/useRepoInstancesQuery.js\nexport const REPO_INSTANCES_QUERY = `\n query MassdriverRepoInstances(\n $organizationId: ID!\n $filter: InstancesFilter\n $sort: InstancesSort\n $cursor: Cursor\n ) {\n instances(\n organizationId: $organizationId\n filter: $filter\n sort: $sort\n cursor: $cursor\n ) {\n cursor {\n next\n }\n items {\n id\n status\n version\n resolvedVersion\n deployedVersion\n createdAt\n updatedAt\n cost {\n lastMonth {\n amount\n currency\n }\n }\n environment {\n id\n name\n }\n component {\n id\n project {\n id\n name\n }\n }\n }\n }\n }\n`;\n\n// apps/web/features/repos/hooks/queries/useRepoDeploymentsQuery.js\nexport const REPO_DEPLOYMENTS_QUERY = `\n query MassdriverRepoDeployments(\n $organizationId: ID!\n $filter: DeploymentsFilter\n $sort: DeploymentsSort\n $cursor: Cursor\n ) {\n deployments(\n organizationId: $organizationId\n filter: $filter\n sort: $sort\n cursor: $cursor\n ) {\n cursor {\n next\n }\n items {\n id\n status\n action\n version\n message\n createdAt\n updatedAt\n lastTransitionedAt\n elapsedTime\n deployedBy\n instance {\n id\n environment {\n id\n name\n }\n component {\n id\n project {\n id\n name\n }\n }\n }\n }\n }\n }\n`;\n\n// Full deployment snapshot for the in-place details dialog (mirrors the web\n// app's useDeploymentQuery / features/environment's DEPLOYMENT_QUERY). `id` is a\n// `UUID!` here, matching `deployment(id:)`.\nexport const DEPLOYMENT_DETAIL_QUERY = `\n query MassdriverDeployment($organizationId: ID!, $id: UUID!) {\n deployment(organizationId: $organizationId, id: $id) {\n id\n status\n action\n version\n message\n params\n effectiveAttributes\n createdAt\n lastTransitionedAt\n elapsedTime\n deployedBy\n instance {\n id\n component { id name }\n }\n }\n }\n`;\n\n// Initial log backfill for the logs drawer. The live tail is streamed\n// separately via the `deploymentLogs` subscription below. `id` is a `UUID!`,\n// matching `deployment(id:)`.\nexport const DEPLOYMENT_LOGS_QUERY = `\n query MassdriverDeploymentLogs($organizationId: ID!, $id: UUID!) {\n deployment(organizationId: $organizationId, id: $id) {\n id\n status\n action\n version\n instance {\n id\n component { id name }\n }\n logs {\n timestamp\n message\n }\n }\n }\n`;\n\n// Live log tail for the logs drawer. Relayed over SSE via\n// useMassdriverSubscription. `$deploymentId` is an `ID!` on the subscription\n// (distinct from the `UUID!` on the deployment query above).\nexport const DEPLOYMENT_LOGS_SUBSCRIPTION = `\n subscription MassdriverDeploymentLogs(\n $organizationId: ID!\n $deploymentId: ID!\n ) {\n deploymentLogs(\n organizationId: $organizationId\n deploymentId: $deploymentId\n ) {\n timestamp\n message\n }\n }\n`;\n\n// apps/web/features/repos/hooks/useRepoTagFilesQuery.js\nexport const REPO_TAG_FILES_QUERY = `\n query MassdriverRepoTagFiles(\n $organizationId: ID!\n $repoId: ID!\n $version: Semver!\n $cursor: Cursor\n ) {\n ociRepo(organizationId: $organizationId, id: $repoId) {\n id\n tags(filter: { version: $version }) {\n items {\n tag\n files(sort: { field: NAME, order: ASC }, cursor: $cursor) {\n cursor {\n next\n previous\n }\n items {\n name\n mediaType\n size\n digest\n url\n }\n }\n }\n }\n }\n }\n`;\n\n// apps/web/features/repos/hooks/useRepoGrantsQuery.js\nexport const REPO_GRANTS_QUERY = `\n query MassdriverRepoGrants($organizationId: ID!, $id: ID!, $cursor: Cursor) {\n ociRepo(organizationId: $organizationId, id: $id) {\n id\n grants(cursor: $cursor) {\n cursor {\n next\n previous\n }\n items {\n id\n action\n recipientConditions\n createdAt\n }\n }\n }\n }\n`;\n"],"names":[],"mappings":"AAIO,MAAM,qBAAA,GAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+B9B,MAAM,YAAA,GAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiBrB,MAAM,oBAAA,GAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+C7B,MAAM,sBAAA,GAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiD/B,MAAM,uBAAA,GAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyBhC,MAAM,qBAAA,GAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsB9B,MAAM,4BAAA,GAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBrC,MAAM,oBAAA,GAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgC7B,MAAM,iBAAA,GAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;"}
@@ -0,0 +1,9 @@
1
+ import { ALL_VERSIONS } from './resolveVersion.esm.js';
2
+
3
+ const buildRepoVersionFilter = (repoId, version) => {
4
+ if (!repoId) return void 0;
5
+ return version === ALL_VERSIONS ? { ociRepoName: { eq: repoId } } : { bundleId: { eq: `${repoId}@${version}` } };
6
+ };
7
+
8
+ export { buildRepoVersionFilter };
9
+ //# sourceMappingURL=repoFilter.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repoFilter.esm.js","sources":["../../../src/features/repo/repoFilter.ts"],"sourcesContent":["import { ALL_VERSIONS } from './resolveVersion';\n\n// Ported from apps/web/features/repos/utils/repoFilter.js.\n//\n// Builds the filter shape shared by the instances / deployments queries on the\n// repo details page. When scoped to \"all versions\" we filter by the OCI repo\n// name (matches every published release); otherwise we pin to a specific bundle\n// id (\"name@version\"), which also accepts release channels like \"name@latest\".\nexport const buildRepoVersionFilter = (\n repoId?: string | null,\n version?: string | null,\n): Record<string, unknown> | undefined => {\n if (!repoId) return undefined;\n return version === ALL_VERSIONS\n ? { ociRepoName: { eq: repoId } }\n : { bundleId: { eq: `${repoId}@${version}` } };\n};\n"],"names":[],"mappings":";;AAQO,MAAM,sBAAA,GAAyB,CACpC,MAAA,EACA,OAAA,KACwC;AACxC,EAAA,IAAI,CAAC,QAAQ,OAAO,MAAA;AACpB,EAAA,OAAO,YAAY,YAAA,GACf,EAAE,aAAa,EAAE,EAAA,EAAI,QAAO,EAAE,GAC9B,EAAE,QAAA,EAAU,EAAE,EAAA,EAAI,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,OAAO,IAAG,EAAE;AACjD;;;;"}
@@ -0,0 +1,22 @@
1
+ const TAB_IDS = {
2
+ OVERVIEW: "overview",
3
+ INSTANCES: "instances",
4
+ DEPLOYMENTS: "deployments",
5
+ FILES: "files",
6
+ VERSIONS: "versions",
7
+ PERMISSIONS: "permissions"
8
+ };
9
+ const DEFAULT_REPO_TAB = TAB_IDS.OVERVIEW;
10
+ const REPO_TABS = [
11
+ { id: TAB_IDS.OVERVIEW, label: "Overview" },
12
+ { id: TAB_IDS.INSTANCES, label: "Instances" },
13
+ { id: TAB_IDS.DEPLOYMENTS, label: "Deployments" },
14
+ { id: TAB_IDS.FILES, label: "Files" },
15
+ { id: TAB_IDS.VERSIONS, label: "Versions" },
16
+ { id: TAB_IDS.PERMISSIONS, label: "Permissions" }
17
+ ];
18
+ const TAB_VALUES = REPO_TABS.map((tab) => tab.id);
19
+ const resolveActiveRepoTab = (tab) => tab && TAB_VALUES.includes(tab) ? tab : DEFAULT_REPO_TAB;
20
+
21
+ export { DEFAULT_REPO_TAB, REPO_TABS, TAB_IDS, resolveActiveRepoTab };
22
+ //# sourceMappingURL=repoTabs.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repoTabs.esm.js","sources":["../../../src/features/repo/repoTabs.ts"],"sourcesContent":["// Ported from apps/web/features/repos/utils/repoTabs.js + repoTabIds.js.\n// The web app's Alarms tab is intentionally hidden; we keep the same visible\n// tab set and order here.\nexport const TAB_IDS = {\n OVERVIEW: 'overview',\n INSTANCES: 'instances',\n DEPLOYMENTS: 'deployments',\n FILES: 'files',\n VERSIONS: 'versions',\n PERMISSIONS: 'permissions',\n} as const;\n\nexport const DEFAULT_REPO_TAB = TAB_IDS.OVERVIEW;\n\nexport const REPO_TABS = [\n { id: TAB_IDS.OVERVIEW, label: 'Overview' },\n { id: TAB_IDS.INSTANCES, label: 'Instances' },\n { id: TAB_IDS.DEPLOYMENTS, label: 'Deployments' },\n { id: TAB_IDS.FILES, label: 'Files' },\n { id: TAB_IDS.VERSIONS, label: 'Versions' },\n { id: TAB_IDS.PERMISSIONS, label: 'Permissions' },\n];\n\nconst TAB_VALUES = REPO_TABS.map(tab => tab.id) as string[];\n\n/** Resolve a requested tab segment to a valid tab id, defaulting to Overview. */\nexport const resolveActiveRepoTab = (tab?: string | null): string =>\n tab && TAB_VALUES.includes(tab) ? tab : DEFAULT_REPO_TAB;\n"],"names":[],"mappings":"AAGO,MAAM,OAAA,GAAU;AAAA,EACrB,QAAA,EAAU,UAAA;AAAA,EACV,SAAA,EAAW,WAAA;AAAA,EACX,WAAA,EAAa,aAAA;AAAA,EACb,KAAA,EAAO,OAAA;AAAA,EACP,QAAA,EAAU,UAAA;AAAA,EACV,WAAA,EAAa;AACf;AAEO,MAAM,mBAAmB,OAAA,CAAQ;AAEjC,MAAM,SAAA,GAAY;AAAA,EACvB,EAAE,EAAA,EAAI,OAAA,CAAQ,QAAA,EAAU,OAAO,UAAA,EAAW;AAAA,EAC1C,EAAE,EAAA,EAAI,OAAA,CAAQ,SAAA,EAAW,OAAO,WAAA,EAAY;AAAA,EAC5C,EAAE,EAAA,EAAI,OAAA,CAAQ,WAAA,EAAa,OAAO,aAAA,EAAc;AAAA,EAChD,EAAE,EAAA,EAAI,OAAA,CAAQ,KAAA,EAAO,OAAO,OAAA,EAAQ;AAAA,EACpC,EAAE,EAAA,EAAI,OAAA,CAAQ,QAAA,EAAU,OAAO,UAAA,EAAW;AAAA,EAC1C,EAAE,EAAA,EAAI,OAAA,CAAQ,WAAA,EAAa,OAAO,aAAA;AACpC;AAEA,MAAM,UAAA,GAAa,SAAA,CAAU,GAAA,CAAI,CAAA,GAAA,KAAO,IAAI,EAAE,CAAA;AAGvC,MAAM,oBAAA,GAAuB,CAAC,GAAA,KACnC,GAAA,IAAO,WAAW,QAAA,CAAS,GAAG,IAAI,GAAA,GAAM;;;;"}
@@ -0,0 +1,22 @@
1
+ const ALL_VERSIONS = "all";
2
+ const bundleQueryId = (repoId, version) => {
3
+ if (!repoId || !version) return null;
4
+ const semver = version === ALL_VERSIONS ? "latest" : version;
5
+ return `${repoId}@${semver}`;
6
+ };
7
+ const resolveSelectedVersion = (version, repo) => {
8
+ if (!repo) return null;
9
+ const tags = repo.tags?.items ?? [];
10
+ const channels = repo.releaseChannels?.items ?? [];
11
+ if (version === ALL_VERSIONS || !version) {
12
+ return tags[0]?.tag ?? null;
13
+ }
14
+ const channelMatch = channels.find((channel) => channel?.name === version);
15
+ if (channelMatch) return channelMatch.tag;
16
+ const tagMatch = tags.find((tag) => tag?.tag === version);
17
+ if (tagMatch) return tagMatch.tag;
18
+ return null;
19
+ };
20
+
21
+ export { ALL_VERSIONS, bundleQueryId, resolveSelectedVersion };
22
+ //# sourceMappingURL=resolveVersion.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveVersion.esm.js","sources":["../../../src/features/repo/resolveVersion.ts"],"sourcesContent":["// Ported from apps/web/features/repos/utils/resolveVersion.js.\nexport const ALL_VERSIONS = 'all';\n\ninterface RepoVersions {\n tags?: { items?: Array<{ tag: string } | null> | null } | null;\n releaseChannels?: {\n items?: Array<{ name: string; tag: string } | null> | null;\n } | null;\n}\n\n/**\n * The `BundleId` used to fetch a bundle for a given repo + version. When the\n * page is scoped to \"all versions\" we resolve the semver to `latest`.\n */\nexport const bundleQueryId = (\n repoId?: string | null,\n version?: string | null,\n): string | null => {\n if (!repoId || !version) return null;\n const semver = version === ALL_VERSIONS ? 'latest' : version;\n return `${repoId}@${semver}`;\n};\n\n/**\n * Resolve the concrete semver tag to load for a page version. \"all\"/empty →\n * the newest tag; a release-channel name → its tag; a tag → itself; otherwise\n * null.\n */\nexport const resolveSelectedVersion = (\n version: string | null | undefined,\n repo: RepoVersions | null | undefined,\n): string | null => {\n if (!repo) return null;\n\n const tags = repo.tags?.items ?? [];\n const channels = repo.releaseChannels?.items ?? [];\n\n if (version === ALL_VERSIONS || !version) {\n return tags[0]?.tag ?? null;\n }\n\n const channelMatch = channels.find(channel => channel?.name === version);\n if (channelMatch) return channelMatch.tag;\n\n const tagMatch = tags.find(tag => tag?.tag === version);\n if (tagMatch) return tagMatch.tag;\n\n return null;\n};\n"],"names":[],"mappings":"AACO,MAAM,YAAA,GAAe;AAarB,MAAM,aAAA,GAAgB,CAC3B,MAAA,EACA,OAAA,KACkB;AAClB,EAAA,IAAI,CAAC,MAAA,IAAU,CAAC,OAAA,EAAS,OAAO,IAAA;AAChC,EAAA,MAAM,MAAA,GAAS,OAAA,KAAY,YAAA,GAAe,QAAA,GAAW,OAAA;AACrD,EAAA,OAAO,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAC5B;AAOO,MAAM,sBAAA,GAAyB,CACpC,OAAA,EACA,IAAA,KACkB;AAClB,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAElB,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,EAAM,KAAA,IAAS,EAAC;AAClC,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,eAAA,EAAiB,KAAA,IAAS,EAAC;AAEjD,EAAA,IAAI,OAAA,KAAY,YAAA,IAAgB,CAAC,OAAA,EAAS;AACxC,IAAA,OAAO,IAAA,CAAK,CAAC,CAAA,EAAG,GAAA,IAAO,IAAA;AAAA,EACzB;AAEA,EAAA,MAAM,eAAe,QAAA,CAAS,IAAA,CAAK,CAAA,OAAA,KAAW,OAAA,EAAS,SAAS,OAAO,CAAA;AACvE,EAAA,IAAI,YAAA,SAAqB,YAAA,CAAa,GAAA;AAEtC,EAAA,MAAM,WAAW,IAAA,CAAK,IAAA,CAAK,CAAA,GAAA,KAAO,GAAA,EAAK,QAAQ,OAAO,CAAA;AACtD,EAAA,IAAI,QAAA,SAAiB,QAAA,CAAS,GAAA;AAE9B,EAAA,OAAO,IAAA;AACT;;;;"}
@@ -0,0 +1,201 @@
1
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
+ import { parseInstanceId } from '@massdriver/backstage-plugin-common';
3
+ import Box from '@massdriver/ui/Box';
4
+ import Button from '@massdriver/ui/Button';
5
+ import Typography from '@massdriver/ui/Typography';
6
+ import stylin from '@massdriver/ui/stylin';
7
+ import { InstanceStatusPill } from '../../../components/InstanceStatusPill.esm.js';
8
+ import { RouterLinkAdapter } from '../../../components/RouterLinkAdapter.esm.js';
9
+ import VersionBadge from '../../../components/VersionBadge.esm.js';
10
+ import { formatRelativeTime } from '../../../utils/formatRelativeTime.esm.js';
11
+ import { composeInstanceStatus } from '../../../utils/instanceStatuses.esm.js';
12
+ import { internalRoutes } from '../../../internalRoutes.esm.js';
13
+ import { parsePlanMessage, formatElapsed, truncateDeploymentId } from '../deploymentHelpers.esm.js';
14
+
15
+ const DeploymentRow = ({
16
+ deployment,
17
+ onViewLogs,
18
+ onViewDetails
19
+ }) => {
20
+ const { instance } = deployment;
21
+ const composedStatus = composeInstanceStatus(
22
+ deployment.action,
23
+ deployment.status
24
+ );
25
+ const parsed = instance?.id ? parseInstanceId(instance.id) : null;
26
+ const instanceHref = parsed ? internalRoutes.instance(
27
+ parsed.projectId,
28
+ parsed.scopedEnvironmentId,
29
+ parsed.scopedComponentId
30
+ ) : null;
31
+ const planSource = deployment.action === "PLAN" ? parsePlanMessage(deployment.message) : null;
32
+ const elapsed = formatElapsed(deployment.elapsedTime);
33
+ const time = formatRelativeTime(
34
+ deployment.lastTransitionedAt ?? deployment.updatedAt ?? deployment.createdAt
35
+ );
36
+ const truncated = truncateDeploymentId(deployment.id);
37
+ const deployedBy = deployment.deployedBy ?? "system";
38
+ const projectName = instance?.component?.project?.name ?? "\u2014";
39
+ const environmentName = instance?.environment?.name ?? "\u2014";
40
+ const instanceLabel = instance?.id ?? "Unknown instance";
41
+ return /* @__PURE__ */ jsxs(Card, { children: [
42
+ /* @__PURE__ */ jsxs(Header, { children: [
43
+ /* @__PURE__ */ jsx(
44
+ InstanceStatusPill,
45
+ {
46
+ status: composedStatus,
47
+ onClick: () => onViewLogs(deployment.id)
48
+ }
49
+ ),
50
+ deployment.version ? /* @__PURE__ */ jsx(VersionBadge, { version: deployment.version }) : null,
51
+ /* @__PURE__ */ jsx(Spacer, {}),
52
+ /* @__PURE__ */ jsx(DeploymentIdText, { title: deployment.id, children: truncated }),
53
+ /* @__PURE__ */ jsx(
54
+ RowButton,
55
+ {
56
+ variant: "text",
57
+ size: "small",
58
+ onClick: () => onViewDetails(deployment.id),
59
+ children: "Details"
60
+ }
61
+ ),
62
+ /* @__PURE__ */ jsx(
63
+ RowButton,
64
+ {
65
+ variant: "text",
66
+ size: "small",
67
+ onClick: () => onViewLogs(deployment.id),
68
+ children: "Logs"
69
+ }
70
+ )
71
+ ] }),
72
+ /* @__PURE__ */ jsxs(Meta, { variant: "caption", children: [
73
+ instanceHref ? /* @__PURE__ */ jsx(InstanceLink, { component: RouterLinkAdapter, href: instanceHref, children: instanceLabel }) : /* @__PURE__ */ jsx(InstanceName, { children: instanceLabel }),
74
+ /* @__PURE__ */ jsx(Sep, { children: "\xB7" }),
75
+ /* @__PURE__ */ jsxs("span", { children: [
76
+ projectName,
77
+ " ",
78
+ /* @__PURE__ */ jsx(Sep, { children: "\xB7" }),
79
+ " ",
80
+ environmentName
81
+ ] }),
82
+ /* @__PURE__ */ jsx(Sep, { children: "\xB7" }),
83
+ /* @__PURE__ */ jsxs("span", { children: [
84
+ "by ",
85
+ /* @__PURE__ */ jsx("strong", { children: deployedBy })
86
+ ] }),
87
+ /* @__PURE__ */ jsx(Sep, { children: "\xB7" }),
88
+ /* @__PURE__ */ jsx("span", { children: time }),
89
+ elapsed ? /* @__PURE__ */ jsxs(Fragment, { children: [
90
+ /* @__PURE__ */ jsx(Sep, { children: "\xB7" }),
91
+ /* @__PURE__ */ jsx("span", { children: elapsed })
92
+ ] }) : null
93
+ ] }),
94
+ planSource ? /* @__PURE__ */ jsxs(PlanSourceBlock, { children: [
95
+ /* @__PURE__ */ jsxs(
96
+ PlanSourceLink,
97
+ {
98
+ variant: "text",
99
+ size: "small",
100
+ onClick: () => onViewDetails(planSource.sourceId),
101
+ children: [
102
+ "Planned deployment of ",
103
+ truncateDeploymentId(planSource.sourceId)
104
+ ]
105
+ }
106
+ ),
107
+ planSource.sourceMessage ? /* @__PURE__ */ jsxs(Message, { title: planSource.sourceMessage, children: [
108
+ '"',
109
+ planSource.sourceMessage,
110
+ '"'
111
+ ] }) : null
112
+ ] }) : deployment.message ? /* @__PURE__ */ jsxs(Message, { title: deployment.message, children: [
113
+ '"',
114
+ deployment.message,
115
+ '"'
116
+ ] }) : null
117
+ ] });
118
+ };
119
+ const Card = stylin(Box)(({ theme }) => ({
120
+ display: "flex",
121
+ flexDirection: "column",
122
+ gap: theme.spacing(0.5),
123
+ padding: theme.spacing(1.25, 1.5),
124
+ borderRadius: 1,
125
+ border: `1px solid ${theme.palette.divider}`,
126
+ backgroundColor: theme.palette.background.paper,
127
+ minWidth: 0
128
+ }));
129
+ const Header = stylin(Box)(({ theme }) => ({
130
+ display: "flex",
131
+ alignItems: "center",
132
+ gap: theme.spacing(1),
133
+ flexWrap: "wrap",
134
+ minWidth: 0
135
+ }));
136
+ const Spacer = stylin(Box)({
137
+ flex: 1
138
+ });
139
+ const DeploymentIdText = stylin("span")(({ theme }) => ({
140
+ fontFamily: theme.typography.fontFamilyMono,
141
+ fontSize: theme.typography.caption.fontSize,
142
+ color: theme.palette.text.secondary,
143
+ whiteSpace: "nowrap",
144
+ overflow: "hidden",
145
+ textOverflow: "ellipsis",
146
+ maxWidth: theme.spacing(20)
147
+ }));
148
+ const RowButton = stylin(Button)(({ theme }) => ({
149
+ flexShrink: 0,
150
+ padding: theme.spacing(0.25, 1)
151
+ }));
152
+ const Meta = stylin(Typography)(({ theme }) => ({
153
+ color: theme.palette.text.secondary,
154
+ display: "flex",
155
+ flexWrap: "wrap",
156
+ alignItems: "center",
157
+ gap: theme.spacing(0.5),
158
+ minWidth: 0
159
+ }));
160
+ const InstanceName = stylin("span")(({ theme }) => ({
161
+ fontWeight: 600,
162
+ color: theme.palette.text.primary
163
+ }));
164
+ const InstanceLink = stylin(Box)(({ theme }) => ({
165
+ fontWeight: 600,
166
+ color: theme.palette.text.primary,
167
+ textDecoration: "none",
168
+ "&:hover": {
169
+ textDecoration: "underline"
170
+ }
171
+ }));
172
+ const Sep = stylin("span")(({ theme }) => ({
173
+ color: theme.palette.text.disabled
174
+ }));
175
+ const PlanSourceBlock = stylin(Box)(({ theme }) => ({
176
+ display: "flex",
177
+ flexDirection: "column",
178
+ gap: theme.spacing(0.25),
179
+ alignItems: "flex-start",
180
+ marginTop: theme.spacing(0.25)
181
+ }));
182
+ const PlanSourceLink = stylin(Button)(({ theme }) => ({
183
+ alignSelf: "flex-start",
184
+ padding: theme.spacing(0.25, 1),
185
+ marginLeft: theme.spacing(-1)
186
+ }));
187
+ const Message = stylin(Typography)(({ theme }) => ({
188
+ fontStyle: "italic",
189
+ fontSize: theme.typography.caption.fontSize,
190
+ color: theme.palette.text.secondary,
191
+ display: "-webkit-box",
192
+ WebkitLineClamp: 2,
193
+ WebkitBoxOrient: "vertical",
194
+ overflow: "hidden",
195
+ lineHeight: 1.4,
196
+ wordBreak: "break-word",
197
+ marginTop: theme.spacing(0.25)
198
+ }));
199
+
200
+ export { DeploymentRow };
201
+ //# sourceMappingURL=DeploymentRow.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeploymentRow.esm.js","sources":["../../../../src/features/repo/tabs/DeploymentRow.tsx"],"sourcesContent":["import { parseInstanceId } from '@massdriver/backstage-plugin-common';\nimport Box from '@massdriver/ui/Box';\nimport Button from '@massdriver/ui/Button';\nimport Typography from '@massdriver/ui/Typography';\nimport stylin from '@massdriver/ui/stylin';\nimport { InstanceStatusPill } from '../../../components/InstanceStatusPill';\nimport { RouterLinkAdapter } from '../../../components/RouterLinkAdapter';\nimport VersionBadge from '../../../components/VersionBadge';\nimport { formatRelativeTime } from '../../../utils/formatRelativeTime';\nimport { composeInstanceStatus } from '../../../utils/instanceStatuses';\nimport { internalRoutes } from '../../../internalRoutes';\nimport {\n formatElapsed,\n parsePlanMessage,\n truncateDeploymentId,\n} from '../deploymentHelpers';\nimport type { RepoDeployment } from '../types';\n\n// Ported from apps/web/features/repos/sections/DeploymentsTab/DeploymentRow.js.\n//\n// \"Details\" opens the in-place ViewDeploymentDetailsDialog (the `deployment`\n// URL param), \"Logs\" and the clickable status pill open the DeploymentLogsDrawer\n// (the `logs` param), and a plan row's \"Planned deployment of <id>\" link opens\n// the source deployment's details — all via the onViewDetails / onViewLogs\n// callbacks, matching the web. The instance name/link still navigates internally\n// to the instance drawer route (that navigation is correct).\nexport const DeploymentRow = ({\n deployment,\n onViewLogs,\n onViewDetails,\n}: {\n deployment: RepoDeployment;\n onViewLogs: (deploymentId: string) => void;\n onViewDetails: (deploymentId: string) => void;\n}) => {\n const { instance } = deployment;\n const composedStatus = composeInstanceStatus(\n deployment.action,\n deployment.status,\n );\n\n const parsed = instance?.id ? parseInstanceId(instance.id) : null;\n const instanceHref = parsed\n ? internalRoutes.instance(\n parsed.projectId,\n parsed.scopedEnvironmentId,\n parsed.scopedComponentId,\n )\n : null;\n\n // Plan deployments encode their source deployment id in the message\n // (\"Planning deployment <uuid>\\n<source-message>\").\n const planSource =\n deployment.action === 'PLAN' ? parsePlanMessage(deployment.message) : null;\n\n const elapsed = formatElapsed(deployment.elapsedTime);\n const time = formatRelativeTime(\n deployment.lastTransitionedAt ??\n deployment.updatedAt ??\n deployment.createdAt,\n );\n const truncated = truncateDeploymentId(deployment.id);\n const deployedBy = deployment.deployedBy ?? 'system';\n const projectName = instance?.component?.project?.name ?? '—';\n const environmentName = instance?.environment?.name ?? '—';\n const instanceLabel = instance?.id ?? 'Unknown instance';\n\n return (\n <Card>\n <Header>\n <InstanceStatusPill\n status={composedStatus}\n onClick={() => onViewLogs(deployment.id)}\n />\n {deployment.version ? (\n <VersionBadge version={deployment.version} />\n ) : null}\n <Spacer />\n <DeploymentIdText title={deployment.id}>{truncated}</DeploymentIdText>\n <RowButton\n variant=\"text\"\n size=\"small\"\n onClick={() => onViewDetails(deployment.id)}\n >\n Details\n </RowButton>\n <RowButton\n variant=\"text\"\n size=\"small\"\n onClick={() => onViewLogs(deployment.id)}\n >\n Logs\n </RowButton>\n </Header>\n <Meta variant=\"caption\">\n {instanceHref ? (\n <InstanceLink component={RouterLinkAdapter} href={instanceHref}>\n {instanceLabel}\n </InstanceLink>\n ) : (\n <InstanceName>{instanceLabel}</InstanceName>\n )}\n <Sep>·</Sep>\n <span>\n {projectName} <Sep>·</Sep> {environmentName}\n </span>\n <Sep>·</Sep>\n <span>\n by <strong>{deployedBy}</strong>\n </span>\n <Sep>·</Sep>\n <span>{time}</span>\n {elapsed ? (\n <>\n <Sep>·</Sep>\n <span>{elapsed}</span>\n </>\n ) : null}\n </Meta>\n {planSource ? (\n <PlanSourceBlock>\n <PlanSourceLink\n variant=\"text\"\n size=\"small\"\n onClick={() => onViewDetails(planSource.sourceId)}\n >\n Planned deployment of {truncateDeploymentId(planSource.sourceId)}\n </PlanSourceLink>\n {planSource.sourceMessage ? (\n <Message title={planSource.sourceMessage}>\n \"{planSource.sourceMessage}\"\n </Message>\n ) : null}\n </PlanSourceBlock>\n ) : deployment.message ? (\n <Message title={deployment.message}>\"{deployment.message}\"</Message>\n ) : null}\n </Card>\n );\n};\n\nexport default DeploymentRow;\n\nconst Card = stylin(Box)(({ theme }: { theme: any }) => ({\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(0.5),\n padding: theme.spacing(1.25, 1.5),\n borderRadius: 1,\n border: `1px solid ${theme.palette.divider}`,\n backgroundColor: theme.palette.background.paper,\n minWidth: 0,\n}));\n\nconst Header = stylin(Box)(({ theme }: { theme: any }) => ({\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n flexWrap: 'wrap',\n minWidth: 0,\n}));\n\nconst Spacer = stylin(Box)({\n flex: 1,\n});\n\nconst DeploymentIdText = stylin('span')(({ theme }: { theme: any }) => ({\n fontFamily: theme.typography.fontFamilyMono,\n fontSize: theme.typography.caption.fontSize,\n color: theme.palette.text.secondary,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n maxWidth: theme.spacing(20),\n}));\n\nconst RowButton = stylin(Button)(({ theme }: { theme: any }) => ({\n flexShrink: 0,\n padding: theme.spacing(0.25, 1),\n}));\n\nconst Meta = stylin(Typography)(({ theme }: { theme: any }) => ({\n color: theme.palette.text.secondary,\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n gap: theme.spacing(0.5),\n minWidth: 0,\n}));\n\nconst InstanceName = stylin('span')(({ theme }: { theme: any }) => ({\n fontWeight: 600,\n color: theme.palette.text.primary,\n}));\n\nconst InstanceLink = stylin(Box)(({ theme }: { theme: any }) => ({\n fontWeight: 600,\n color: theme.palette.text.primary,\n textDecoration: 'none',\n '&:hover': {\n textDecoration: 'underline',\n },\n}));\n\nconst Sep = stylin('span')(({ theme }: { theme: any }) => ({\n color: theme.palette.text.disabled,\n}));\n\nconst PlanSourceBlock = stylin(Box)(({ theme }: { theme: any }) => ({\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(0.25),\n alignItems: 'flex-start',\n marginTop: theme.spacing(0.25),\n}));\n\nconst PlanSourceLink = stylin(Button)(({ theme }: { theme: any }) => ({\n alignSelf: 'flex-start',\n padding: theme.spacing(0.25, 1),\n marginLeft: theme.spacing(-1),\n}));\n\n// Wrap up to two lines so a real commit-message-style note is visible without\n// being clipped to a single line; longer messages still ellipsize.\nconst Message = stylin(Typography)(({ theme }: { theme: any }) => ({\n fontStyle: 'italic',\n fontSize: theme.typography.caption.fontSize,\n color: theme.palette.text.secondary,\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n overflow: 'hidden',\n lineHeight: 1.4,\n wordBreak: 'break-word',\n marginTop: theme.spacing(0.25),\n}));\n"],"names":[],"mappings":"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"}