@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 @@
1
+ {"version":3,"file":"ResourcesTab.esm.js","sources":["../../../../../src/features/environment/InstanceDrawer/tabs/ResourcesTab.tsx"],"sourcesContent":["import { Fragment, useMemo, useState } from 'react';\nimport { useApi } from '@backstage/frontend-plugin-api';\nimport {\n composeEnvironmentId,\n parseEnvironmentId,\n parseInstanceId,\n resourceUrl,\n} from '@massdriver/backstage-plugin-common';\nimport Box from '@massdriver/ui/Box';\nimport Typography from '@massdriver/ui/Typography';\nimport Tooltip from '@massdriver/ui/Tooltip';\nimport Collapse from '@massdriver/ui/Collapse';\nimport CodeBlock from '@massdriver/ui/CodeBlock';\nimport CopyButton from '@massdriver/ui/CopyButton';\nimport Chip from '@massdriver/ui/Chip';\nimport IconButton from '@massdriver/ui/IconButton';\nimport HelpOutlineIcon from '@massdriver/ui/icons/HelpOutlineIcon';\nimport ExpandMoreIcon from '@massdriver/ui/icons/ExpandMoreIcon';\nimport ExpandLessIcon from '@massdriver/ui/icons/ExpandLessIcon';\nimport DownloadIcon from '@massdriver/ui/icons/DownloadIcon';\nimport stylin from '@massdriver/ui/stylin';\nimport { massdriverApiRef } from '../../../../api';\nimport { RouterLinkAdapter } from '../../../../components/RouterLinkAdapter';\nimport { internalRoutes } from '../../../../internalRoutes';\nimport { useLiveRelayQuery } from '../../realtime/useLiveRelayQuery';\nimport { TabState } from '../TabState';\nimport { RESOURCES_QUERY, RESOURCE_CONSUMERS_QUERY } from '../queries';\nimport { useInstanceApiQuery } from '../useInstanceApiQuery';\nimport {\n buildResourceRows,\n formatGrantConditions,\n formatPayload,\n RESOURCE_STATE,\n type ResourceRow,\n} from '../helpers';\nimport type {\n BundleResourceEntry,\n InstanceResourceEntry,\n ProducedResource,\n} from '../types';\nimport { chipClasses } from '../../../../theme/muiClasses';\n\n/** Read-only Resources tab: produced/pending resources with consumers + grants. */\nexport const ResourcesTab = ({ instanceId }: { instanceId: string | null }) => {\n const { value, loading, error } = useInstanceApiQuery<{\n instance: {\n id: string;\n bundle?: {\n id: string;\n resources?: (BundleResourceEntry | null)[] | null;\n } | null;\n resources?: (InstanceResourceEntry | null)[] | null;\n } | null;\n }>(RESOURCES_QUERY, instanceId);\n\n const rows = useMemo(\n () =>\n buildResourceRows(\n value?.instance?.bundle?.resources,\n value?.instance?.resources,\n ),\n [value?.instance],\n );\n\n return (\n <TabState loading={loading} error={error}>\n <Root>\n {rows.length === 0 ? (\n <EmptyNote>This instance does not produce any resources.</EmptyNote>\n ) : (\n <List>\n {rows.map(row =>\n row.state === RESOURCE_STATE.CREATED ? (\n <CreatedResourceCard key={row.field} row={row} />\n ) : (\n <UncreatedResourceCard key={row.field} row={row} />\n ),\n )}\n </List>\n )}\n </Root>\n </TabState>\n );\n};\n\nexport default ResourcesTab;\n\ninterface Grant {\n id: string;\n action?: string | null;\n recipientConditions?: unknown;\n}\ninterface Connection {\n id: string;\n toField?: string | null;\n toInstance?: { id: string; name?: string | null } | null;\n}\ninterface RemoteReference {\n id: string;\n field?: string | null;\n instance?: { id: string; name?: string | null } | null;\n}\ninterface EnvironmentDefault {\n id: string;\n environment?: {\n id: string;\n name?: string | null;\n project?: { id: string; name?: string | null } | null;\n } | null;\n}\n\nconst instanceHref = (id?: string | null): string | null => {\n if (!id) return null;\n const { projectId, scopedEnvironmentId, scopedComponentId } =\n parseInstanceId(id);\n if (!projectId || !scopedEnvironmentId || !scopedComponentId) return null;\n return internalRoutes.instance(\n projectId,\n scopedEnvironmentId,\n scopedComponentId,\n );\n};\n\nconst environmentHref = (id?: string | null): string | null => {\n if (!id) return null;\n const { projectId, scopedEnvironmentId } = parseEnvironmentId(id);\n if (!projectId || !scopedEnvironmentId) return null;\n return internalRoutes.environment(\n projectId,\n composeEnvironmentId(projectId, scopedEnvironmentId),\n );\n};\n\nconst CreatedResourceCard = ({ row }: { row: ResourceRow }) => {\n const api = useApi(massdriverApiRef);\n const [payloadOpen, setPayloadOpen] = useState(false);\n const resource = row.resource as ProducedResource | null;\n\n // Live query: consumers (connections/remote refs/env defaults/grants) track\n // realtime events instead of going stale after the first render.\n const { value: consumersResult, error: consumersError } = useLiveRelayQuery<{\n resource: {\n connections?: { items?: (Connection | null)[] | null };\n environmentDefaults?: { items?: (EnvironmentDefault | null)[] | null };\n remoteReferences?: { items?: (RemoteReference | null)[] | null };\n grants?: { items?: (Grant | null)[] | null };\n } | null;\n }>(RESOURCE_CONSUMERS_QUERY, resource?.id ? { id: resource.id } : null);\n const consumers = consumersResult?.resource ?? null;\n\n const grants = (consumers?.grants?.items ?? []).filter(Boolean) as Grant[];\n const connectionItems = (consumers?.connections?.items ?? []).filter(\n Boolean,\n ) as Connection[];\n const remoteReferenceItems = (\n consumers?.remoteReferences?.items ?? []\n ).filter(Boolean) as RemoteReference[];\n const environmentDefaultItems = (\n consumers?.environmentDefaults?.items ?? []\n ).filter(Boolean) as EnvironmentDefault[];\n\n const payloadString = formatPayload(resource?.payload);\n const resourceName = resource?.name || '—';\n const resHref =\n resource?.id && api.appUrl\n ? resourceUrl(api.appUrl, api.organizationId, resource.id)\n : '';\n\n return (\n <Card>\n <HeaderRow>\n <TitleRow>\n <CardTitle title={row.field}>{row.field}</CardTitle>\n <Tooltip\n placement=\"top\"\n arrow\n title={\n <TooltipBody>\n <div>\n <strong>Type:</strong> The resource type produced by this\n instance output.\n </div>\n <div>\n <strong>Resource:</strong> The name of the produced resource.\n </div>\n <div>\n <strong>Connections / Remote refs / Env defaults:</strong>{' '}\n Other instances or environments that consume this resource.\n </div>\n <div>\n <strong>Resource data:</strong> The redacted payload.\n </div>\n </TooltipBody>\n }\n >\n <HelpIcon />\n </Tooltip>\n </TitleRow>\n <HeaderActions>\n <ResourceGrantsChip grants={grants} />\n {resource?.id ? (\n <CopyButton\n text={resource.id}\n tooltip=\"Copy resource ID\"\n size=\"small\"\n />\n ) : null}\n <Tooltip\n title=\"This view is read-only. Open in Massdriver to download resource data.\"\n placement=\"top\"\n >\n <DownloadWrap>\n <IconButton\n size=\"small\"\n disabled\n aria-label=\"Download resource data\"\n >\n <DownloadIcon fontSize=\"small\" />\n </IconButton>\n </DownloadWrap>\n </Tooltip>\n </HeaderActions>\n </HeaderRow>\n <DetailColumn>\n <DetailRow>\n <Label>Type:</Label>\n <Detail title={row.resourceType?.name || '—'}>\n {row.resourceType?.name || '—'}\n </Detail>\n </DetailRow>\n <DetailRow>\n <Label>Resource:</Label>\n {resHref ? (\n <ResourceLink\n href={resHref}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n title={resourceName}\n >\n {resourceName}\n </ResourceLink>\n ) : (\n <Detail title={resourceName}>{resourceName}</Detail>\n )}\n </DetailRow>\n {connectionItems.length > 0 ? (\n <DetailRow>\n <Label>Connections:</Label>\n <ListValue>\n <ConsumerList\n items={connectionItems.map(connection => ({\n key: connection.id,\n label: connection.toInstance?.name ?? 'instance',\n href: instanceHref(connection.toInstance?.id),\n }))}\n />\n </ListValue>\n </DetailRow>\n ) : null}\n {remoteReferenceItems.length > 0 ? (\n <DetailRow>\n <Label>Remote refs:</Label>\n <ListValue>\n <ConsumerList\n items={remoteReferenceItems.map(reference => ({\n key: reference.id,\n label: reference.instance?.name ?? 'instance',\n href: instanceHref(reference.instance?.id),\n }))}\n />\n </ListValue>\n </DetailRow>\n ) : null}\n {environmentDefaultItems.length > 0 ? (\n <DetailRow>\n <Label>Env defaults:</Label>\n <ListValue>\n <ConsumerList\n items={environmentDefaultItems.map(envDefault => {\n const projectName = envDefault.environment?.project?.name;\n const envName = envDefault.environment?.name ?? 'environment';\n return {\n key: envDefault.id,\n label: projectName\n ? `${projectName} / ${envName}`\n : envName,\n href: environmentHref(envDefault.environment?.id),\n };\n })}\n />\n </ListValue>\n </DetailRow>\n ) : null}\n {consumersError ? (\n <DetailRow>\n <Label>Consumers:</Label>\n <Detail title={consumersError.message}>\n Couldn't load consumers\n </Detail>\n </DetailRow>\n ) : null}\n </DetailColumn>\n <PayloadSection>\n <PayloadToggle\n type=\"button\"\n onClick={() => setPayloadOpen(open => !open)}\n aria-expanded={payloadOpen}\n >\n <PayloadToggleLabel>Resource data</PayloadToggleLabel>\n {payloadOpen ? (\n <ExpandLessIcon fontSize=\"small\" />\n ) : (\n <ExpandMoreIcon fontSize=\"small\" />\n )}\n </PayloadToggle>\n <Collapse in={payloadOpen} unmountOnExit>\n <PayloadInner>\n {payloadString ? (\n <PayloadCodeBlock>{payloadString}</PayloadCodeBlock>\n ) : (\n <EmptyPayload>No payload available.</EmptyPayload>\n )}\n </PayloadInner>\n </Collapse>\n </PayloadSection>\n </Card>\n );\n};\n\nconst UncreatedResourceCard = ({ row }: { row: ResourceRow }) => (\n <Card pending>\n <HeaderRow>\n <TitleRow>\n <CardTitle title={row.field}>{row.field}</CardTitle>\n <Tooltip\n placement=\"top\"\n arrow\n title={\n <TooltipBody>\n <div>\n This resource has not been produced yet. Once the instance is\n deployed successfully, it will be created and details will\n appear here.\n </div>\n </TooltipBody>\n }\n >\n <HelpIcon />\n </Tooltip>\n </TitleRow>\n </HeaderRow>\n <DetailColumn>\n <DetailRow>\n <Label>Type:</Label>\n <Detail title={row.resourceType?.name || '—'}>\n {row.resourceType?.name || '—'}\n </Detail>\n </DetailRow>\n </DetailColumn>\n </Card>\n);\n\nconst ConsumerList = ({\n items,\n}: {\n items: Array<{ key: string; label: string; href: string | null }>;\n}) => (\n <>\n {items.map((item, index) => (\n <Fragment key={item.key}>\n {index > 0 ? <Comma>, </Comma> : null}\n {item.href ? (\n <ConsumerAnchor href={item.href} title={item.label}>\n {item.label}\n </ConsumerAnchor>\n ) : (\n <ConsumerText title={item.label}>{item.label}</ConsumerText>\n )}\n </Fragment>\n ))}\n </>\n);\n\nconst ResourceGrantsChip = ({ grants }: { grants: Grant[] }) => {\n if (!grants || grants.length === 0) return null;\n return (\n <Tooltip\n placement=\"top\"\n arrow\n title={\n <TooltipBody>\n <TooltipTitle>\n Shared with {grants.length} grant{grants.length === 1 ? '' : 's'}\n </TooltipTitle>\n {grants.map(grant => (\n <GrantRow key={grant.id}>\n <GrantAction>{grant.action}</GrantAction>\n <GrantConditions>\n {formatGrantConditions(grant.recipientConditions)}\n </GrantConditions>\n </GrantRow>\n ))}\n </TooltipBody>\n }\n >\n <SharedChip label=\"Shared\" size=\"small\" color=\"info\" variant=\"outlined\" />\n </Tooltip>\n );\n};\n\nconst Root = stylin(Box)(({ theme }: { theme: any }) => ({\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(4),\n padding: theme.spacing(1),\n}));\n\nconst List = stylin(Box)(({ theme }: { theme: any }) => ({\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(2),\n}));\n\nconst EmptyNote = stylin(Typography)(({ theme }: { theme: any }) => ({\n fontSize: theme.typography.pxToRem(12),\n color: theme.palette.text.secondary,\n fontStyle: 'italic',\n}));\n\nconst Card = stylin(Box, ['pending'])(\n ({ theme, pending }: { theme: any; pending?: boolean }) => ({\n position: 'relative',\n border: `1px ${pending ? 'dashed' : 'solid'} ${theme.palette.divider}`,\n backgroundColor: theme.palette.background.paper,\n borderRadius: '4px',\n padding: theme.spacing(1, 1.75),\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(0.5),\n }),\n);\n\nconst HeaderRow = stylin(Box)(({ theme }: { theme: any }) => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: theme.spacing(0.5),\n minWidth: 0,\n}));\n\nconst TitleRow = stylin(Box)({\n display: 'flex',\n alignItems: 'center',\n gap: '2px',\n minWidth: 0,\n flex: 1,\n});\n\nconst CardTitle = stylin(Typography)(({ theme }: { theme: any }) => ({\n fontSize: theme.typography.pxToRem(14),\n color: theme.palette.text.primary,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n minWidth: 0,\n}));\n\nconst HeaderActions = stylin(Box)(({ theme }: { theme: any }) => ({\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(0.25),\n flexShrink: 0,\n}));\n\nconst DownloadWrap = stylin('span')({\n display: 'inline-flex',\n});\n\nconst ResourceLink = stylin('a')(({ theme }: { theme: any }) => ({\n fontSize: theme.typography.pxToRem(11),\n color: theme.palette.primary.main,\n textDecoration: 'underline',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n minWidth: 0,\n '&:hover': { color: theme.palette.primary.dark },\n}));\n\nconst HelpIcon = stylin(HelpOutlineIcon)(({ theme }: { theme: any }) => ({\n width: 15,\n height: 15,\n color: theme.palette.text.secondary,\n flexShrink: 0,\n '&:hover': { color: theme.palette.primary.main },\n}));\n\nconst DetailColumn = stylin(Box)(({ theme }: { theme: any }) => ({\n display: 'flex',\n flexDirection: 'column',\n gap: '2px',\n marginLeft: theme.spacing(1.5),\n}));\n\nconst DetailRow = stylin(Box)(({ theme }: { theme: any }) => ({\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n gap: theme.spacing(0.5),\n minWidth: 0,\n}));\n\nconst Label = stylin(Typography)(({ theme }: { theme: any }) => ({\n fontSize: theme.typography.pxToRem(11),\n fontWeight: theme.typography.fontWeightMedium,\n whiteSpace: 'nowrap',\n flexShrink: 0,\n}));\n\nconst Detail = stylin(Typography)(({ theme }: { theme: any }) => ({\n fontSize: theme.typography.pxToRem(11),\n color: theme.palette.text.primary,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n}));\n\nconst ListValue = stylin(Box)({\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'wrap',\n alignItems: 'baseline',\n minWidth: 0,\n});\n\nconst Comma = stylin('span')(({ theme }: { theme: any }) => ({\n fontSize: theme.typography.pxToRem(11),\n color: theme.palette.text.primary,\n marginRight: '2px',\n}));\n\nconst ConsumerAnchor = stylin(RouterLinkAdapter)(\n ({ theme }: { theme: any }) => ({\n fontSize: theme.typography.pxToRem(11),\n color: theme.palette.primary.main,\n textDecoration: 'underline',\n whiteSpace: 'nowrap',\n '&:hover': { color: theme.palette.primary.dark },\n }),\n);\n\nconst ConsumerText = stylin(Typography)(({ theme }: { theme: any }) => ({\n fontSize: theme.typography.pxToRem(11),\n color: theme.palette.text.primary,\n whiteSpace: 'nowrap',\n}));\n\nconst TooltipBody = stylin(Box)(({ theme }: { theme: any }) => ({\n display: 'flex',\n flexDirection: 'column',\n gap: '2px',\n fontSize: theme.typography.pxToRem(12),\n lineHeight: 1.4,\n maxWidth: 320,\n}));\n\nconst TooltipTitle = stylin(Typography)(({ theme }: { theme: any }) => ({\n fontSize: theme.typography.pxToRem(12),\n fontWeight: theme.typography.fontWeightBold,\n}));\n\nconst GrantRow = stylin(Box)({\n display: 'flex',\n flexDirection: 'column',\n gap: '2px',\n});\n\nconst GrantAction = stylin('span')(({ theme }: { theme: any }) => ({\n fontFamily: 'monospace',\n fontSize: theme.typography.pxToRem(11),\n}));\n\nconst GrantConditions = stylin('span')(({ theme }: { theme: any }) => ({\n fontSize: theme.typography.pxToRem(11),\n opacity: 0.9,\n}));\n\nconst SharedChip = stylin(Chip)(({ theme }: { theme: any }) => ({\n height: 18,\n fontSize: theme.typography.pxToRem(11),\n [`& .${chipClasses.label}`]: { paddingLeft: '6px', paddingRight: '6px' },\n}));\n\nconst PayloadSection = stylin(Box)(({ theme }: { theme: any }) => ({\n display: 'flex',\n flexDirection: 'column',\n marginTop: theme.spacing(1),\n marginLeft: `-${theme.spacing(1.75)}`,\n marginRight: `-${theme.spacing(1.75)}`,\n marginBottom: `-${theme.spacing(1)}`,\n}));\n\nconst PayloadToggle = stylin('button')(({ theme }: { theme: any }) => ({\n border: 'none',\n borderTop: `1px solid ${theme.palette.divider}`,\n background: 'transparent',\n padding: theme.spacing(0.75, 1.75),\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n cursor: 'pointer',\n color: theme.palette.text.secondary,\n fontFamily: 'inherit',\n borderRadius: 0,\n '&:hover': {\n backgroundColor: theme.palette.action.hover,\n color: theme.palette.primary.main,\n },\n}));\n\nconst PayloadToggleLabel = stylin(Typography)(({ theme }: { theme: any }) => ({\n fontSize: theme.typography.pxToRem(11),\n fontWeight: theme.typography.fontWeightMedium,\n color: 'inherit',\n}));\n\nconst PayloadInner = stylin(Box)(({ theme }: { theme: any }) => ({\n padding: theme.spacing(1.75),\n}));\n\nconst PayloadCodeBlock = stylin(CodeBlock)(({ theme }: { theme: any }) => ({\n fontSize: theme.typography.pxToRem(11),\n padding: theme.spacing(1),\n}));\n\nconst EmptyPayload = stylin(Typography)(({ theme }: { theme: any }) => ({\n fontSize: theme.typography.pxToRem(11),\n color: theme.palette.text.secondary,\n fontStyle: 'italic',\n}));\n"],"names":["Fragment"],"mappings":"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"}
@@ -0,0 +1,109 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import Box from '@massdriver/ui/Box';
3
+ import Typography from '@massdriver/ui/Typography';
4
+ import TextField from '@massdriver/ui/TextField';
5
+ import FormsMarkdown from '@massdriver/ui/FormsMarkdown';
6
+ import stylin from '@massdriver/ui/stylin';
7
+ import { DisabledAction } from '../../../../components/DisabledAction.esm.js';
8
+
9
+ const MASKED_VALUE = "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022";
10
+ const SecretsTab = ({
11
+ secretFields = []
12
+ }) => /* @__PURE__ */ jsx(Root, { children: secretFields.length > 0 ? secretFields.map((field) => {
13
+ const isSet = Boolean(field.sha256);
14
+ return /* @__PURE__ */ jsxs(Item, { children: [
15
+ /* @__PURE__ */ jsx(SecretTitle, { children: `${field.title || field.name}${field.required ? "*" : ""}` }),
16
+ /* @__PURE__ */ jsxs(ValueRow, { children: [
17
+ /* @__PURE__ */ jsx(
18
+ MaskedField,
19
+ {
20
+ value: isSet ? MASKED_VALUE : "",
21
+ placeholder: isSet ? "" : "No value set",
22
+ size: "small",
23
+ fullWidth: true,
24
+ disabled: true
25
+ }
26
+ ),
27
+ /* @__PURE__ */ jsxs(Actions, { children: [
28
+ /* @__PURE__ */ jsx(
29
+ DisabledAction,
30
+ {
31
+ label: "Edit",
32
+ variant: "text",
33
+ size: "small",
34
+ tooltip: "This view is read-only. Open in Massdriver to set this secret."
35
+ }
36
+ ),
37
+ isSet ? /* @__PURE__ */ jsx(
38
+ DisabledAction,
39
+ {
40
+ label: "Clear",
41
+ variant: "text",
42
+ size: "small",
43
+ color: "error",
44
+ tooltip: "This view is read-only. Open in Massdriver to clear this secret."
45
+ }
46
+ ) : null
47
+ ] })
48
+ ] }),
49
+ isSet && field.sha256 ? /* @__PURE__ */ jsxs(Meta, { title: field.sha256, children: [
50
+ "sha256: ",
51
+ field.sha256.slice(0, 12),
52
+ "\u2026"
53
+ ] }) : null,
54
+ field.description ? /* @__PURE__ */ jsx(Description, { children: /* @__PURE__ */ jsx(FormsMarkdown, { children: field.description }) }) : null
55
+ ] }, field.name);
56
+ }) : /* @__PURE__ */ jsx(EmptyNote, { children: "This component doesn't declare any secrets." }) });
57
+ const Root = stylin(Box)(({ theme }) => ({
58
+ display: "flex",
59
+ flexDirection: "column",
60
+ gap: theme.spacing(3),
61
+ padding: theme.spacing(1)
62
+ }));
63
+ const Item = stylin(Box)(({ theme }) => ({
64
+ display: "flex",
65
+ flexDirection: "column",
66
+ gap: theme.spacing(0.75),
67
+ paddingBottom: theme.spacing(1.5),
68
+ borderBottom: `1px solid ${theme.palette.divider}`
69
+ }));
70
+ const SecretTitle = stylin(Typography)(({ theme }) => ({
71
+ fontSize: theme.typography.pxToRem(13),
72
+ fontWeight: 600,
73
+ color: theme.palette.text.primary
74
+ }));
75
+ const ValueRow = stylin(Box)(({ theme }) => ({
76
+ display: "flex",
77
+ alignItems: "center",
78
+ gap: theme.spacing(1)
79
+ }));
80
+ const MaskedField = stylin(TextField)({
81
+ flex: 1,
82
+ minWidth: 0
83
+ });
84
+ const Actions = stylin(Box)(({ theme }) => ({
85
+ display: "flex",
86
+ alignItems: "center",
87
+ gap: theme.spacing(0.5),
88
+ flexShrink: 0
89
+ }));
90
+ const Meta = stylin(Typography)(({ theme }) => ({
91
+ fontSize: theme.typography.pxToRem(11),
92
+ color: theme.palette.text.secondary,
93
+ fontFamily: theme.typography.fontFamilyMono,
94
+ overflow: "hidden",
95
+ textOverflow: "ellipsis",
96
+ whiteSpace: "nowrap"
97
+ }));
98
+ const Description = stylin(Box)(({ theme }) => ({
99
+ fontSize: theme.typography.pxToRem(12),
100
+ color: theme.palette.text.secondary
101
+ }));
102
+ const EmptyNote = stylin(Typography)(({ theme }) => ({
103
+ fontSize: theme.typography.pxToRem(12),
104
+ color: theme.palette.text.secondary,
105
+ fontStyle: "italic"
106
+ }));
107
+
108
+ export { SecretsTab, SecretsTab as default };
109
+ //# sourceMappingURL=SecretsTab.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SecretsTab.esm.js","sources":["../../../../../src/features/environment/InstanceDrawer/tabs/SecretsTab.tsx"],"sourcesContent":["import Box from '@massdriver/ui/Box';\nimport Typography from '@massdriver/ui/Typography';\nimport TextField from '@massdriver/ui/TextField';\nimport FormsMarkdown from '@massdriver/ui/FormsMarkdown';\nimport stylin from '@massdriver/ui/stylin';\nimport { DisabledAction } from '../../../../components/DisabledAction';\nimport type { SecretField } from '../types';\n\n// The secret value is never fetched (only `sha256`), so it is always masked.\nconst MASKED_VALUE = '••••••••••••';\n\n/**\n * Read-only Secrets tab: mirrors the web app's per-secret line item (masked\n * value field, sha256 fingerprint, markdown description). Set/clear are\n * mutations, so they render as disabled controls with a tooltip pointing to\n * Massdriver (the web app is where secrets are actually managed).\n */\nexport const SecretsTab = ({\n secretFields = [],\n}: {\n secretFields?: SecretField[];\n}) => (\n <Root>\n {secretFields.length > 0 ? (\n secretFields.map(field => {\n const isSet = Boolean(field.sha256);\n return (\n <Item key={field.name}>\n <SecretTitle>\n {`${field.title || field.name}${field.required ? '*' : ''}`}\n </SecretTitle>\n <ValueRow>\n <MaskedField\n value={isSet ? MASKED_VALUE : ''}\n placeholder={isSet ? '' : 'No value set'}\n size=\"small\"\n fullWidth\n disabled\n />\n <Actions>\n <DisabledAction\n label=\"Edit\"\n variant=\"text\"\n size=\"small\"\n tooltip=\"This view is read-only. Open in Massdriver to set this secret.\"\n />\n {isSet ? (\n <DisabledAction\n label=\"Clear\"\n variant=\"text\"\n size=\"small\"\n color=\"error\"\n tooltip=\"This view is read-only. Open in Massdriver to clear this secret.\"\n />\n ) : null}\n </Actions>\n </ValueRow>\n {isSet && field.sha256 ? (\n <Meta title={field.sha256}>\n sha256: {field.sha256.slice(0, 12)}…\n </Meta>\n ) : null}\n {field.description ? (\n <Description>\n <FormsMarkdown>{field.description}</FormsMarkdown>\n </Description>\n ) : null}\n </Item>\n );\n })\n ) : (\n <EmptyNote>This component doesn't declare any secrets.</EmptyNote>\n )}\n </Root>\n);\n\nexport default SecretsTab;\n\nconst Root = stylin(Box)(({ theme }: { theme: any }) => ({\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(3),\n padding: theme.spacing(1),\n}));\n\nconst Item = stylin(Box)(({ theme }: { theme: any }) => ({\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(0.75),\n paddingBottom: theme.spacing(1.5),\n borderBottom: `1px solid ${theme.palette.divider}`,\n}));\n\nconst SecretTitle = stylin(Typography)(({ theme }: { theme: any }) => ({\n fontSize: theme.typography.pxToRem(13),\n fontWeight: 600,\n color: theme.palette.text.primary,\n}));\n\nconst ValueRow = stylin(Box)(({ theme }: { theme: any }) => ({\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n}));\n\nconst MaskedField = stylin(TextField)({\n flex: 1,\n minWidth: 0,\n});\n\nconst Actions = stylin(Box)(({ theme }: { theme: any }) => ({\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(0.5),\n flexShrink: 0,\n}));\n\nconst Meta = stylin(Typography)(({ theme }: { theme: any }) => ({\n fontSize: theme.typography.pxToRem(11),\n color: theme.palette.text.secondary,\n fontFamily: theme.typography.fontFamilyMono,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n}));\n\nconst Description = stylin(Box)(({ theme }: { theme: any }) => ({\n fontSize: theme.typography.pxToRem(12),\n color: theme.palette.text.secondary,\n}));\n\nconst EmptyNote = stylin(Typography)(({ theme }: { theme: any }) => ({\n fontSize: theme.typography.pxToRem(12),\n color: theme.palette.text.secondary,\n fontStyle: 'italic',\n}));\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,384 @@
1
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
+ import { useMemo } from 'react';
3
+ import { useApi } from '@backstage/frontend-plugin-api';
4
+ import useAsync from 'react-use/esm/useAsync';
5
+ import { Dialog, DialogHeader, DialogActions, DialogContent } from '@massdriver/ui/Dialog';
6
+ import Box from '@massdriver/ui/Box';
7
+ import Typography from '@massdriver/ui/Typography';
8
+ import Button from '@massdriver/ui/Button';
9
+ import IconButton from '@massdriver/ui/IconButton';
10
+ import CopyButton from '@massdriver/ui/CopyButton';
11
+ import Alert from '@massdriver/ui/Alert';
12
+ import LoadingIndicator from '@massdriver/ui/LoadingIndicator';
13
+ import DataList, { col } from '@massdriver/ui/DataList';
14
+ import stylin from '@massdriver/ui/stylin';
15
+ import CloseIcon from '@massdriver/ui/icons/CloseIcon';
16
+ import HistoryIcon from '@massdriver/ui/icons/HistoryIcon';
17
+ import { massdriverApiRef } from '../../../../api.esm.js';
18
+ import InstanceStatusPill from '../../components/InstanceStatusPill.esm.js';
19
+ import { composeInstanceStatus } from '../../../../utils/instanceStatuses.esm.js';
20
+ import VersionBadge from '../../../../components/VersionBadge.esm.js';
21
+ import { ComparisonValueCell } from '../../CompareEnvironmentsDialog/ComparisonValueCell.esm.js';
22
+ import { DEPLOYMENT_QUERY } from '../queries.esm.js';
23
+ import { formatDeploymentStatus, formatElapsed, formatRelativeTime, formatAbsoluteDateTime, parsePlanMessage, parseRollbackMessage, stripMessageContext, deploymentHasLogs, parseMap, truncateDeploymentId, formatAttributeValue } from '../helpers.esm.js';
24
+ import flattenParams from './flattenParams.esm.js';
25
+ import { useOpenLogs } from './DeploymentLogsPanel.esm.js';
26
+ import { DisabledApprovalCluster, DisabledRollbackButton, LogsButton } from './DeploymentReadOnlyActions.esm.js';
27
+
28
+ const renderValueCell = (_value, row) => /* @__PURE__ */ jsx(
29
+ ComparisonValueCell,
30
+ {
31
+ side: { present: true, value: row.value },
32
+ isDifferent: false,
33
+ isMissing: false
34
+ }
35
+ );
36
+ const COLUMNS = [
37
+ col.text("path", "Path", {
38
+ flex: 2,
39
+ minWidth: 200,
40
+ sortable: true,
41
+ searchable: true
42
+ }),
43
+ col.custom("value", "Value", renderValueCell, {
44
+ flex: 3,
45
+ minWidth: 220,
46
+ sortable: false,
47
+ searchable: false
48
+ })
49
+ ];
50
+ const buildHeading = (componentName, statusLabel) => {
51
+ const verb = statusLabel && statusLabel !== "\u2014" ? statusLabel.toLowerCase() : null;
52
+ if (!componentName && !verb) return "Deployment";
53
+ if (!verb) return `${componentName} deployment`;
54
+ return componentName ? `${componentName} \xB7 ${verb}` : verb;
55
+ };
56
+ const ViewDeploymentDetails = ({
57
+ deploymentId,
58
+ onClose,
59
+ onShowSource
60
+ }) => {
61
+ const api = useApi(massdriverApiRef);
62
+ const openLogs = useOpenLogs();
63
+ const open = Boolean(deploymentId);
64
+ const { value, loading, error } = useAsync(async () => {
65
+ if (!deploymentId) return null;
66
+ const data = await api.query(DEPLOYMENT_QUERY, { id: deploymentId });
67
+ return data.deployment;
68
+ }, [api, deploymentId]);
69
+ const deployment = value;
70
+ const paramRows = useMemo(
71
+ () => flattenParams(deployment?.params),
72
+ [deployment?.params]
73
+ );
74
+ const statusLabel = formatDeploymentStatus(
75
+ deployment?.action,
76
+ deployment?.status
77
+ );
78
+ const componentName = deployment?.instance?.component?.name;
79
+ const elapsed = formatElapsed(deployment?.elapsedTime);
80
+ const occurredIso = deployment?.lastTransitionedAt ?? deployment?.createdAt;
81
+ const time = formatRelativeTime(occurredIso);
82
+ const absoluteDate = formatAbsoluteDateTime(occurredIso);
83
+ const deployedBy = deployment?.deployedBy ?? "system";
84
+ const heading = buildHeading(componentName, statusLabel);
85
+ const planSource = deployment?.action === "PLAN" ? parsePlanMessage(deployment?.message) : null;
86
+ const rollbackSource = parseRollbackMessage(deployment?.message);
87
+ const displayMessage = stripMessageContext(deployment?.message);
88
+ const isProposed = deployment?.status === "PROPOSED";
89
+ const isRollbackEligible = deployment?.action === "PROVISION" && deployment?.status === "COMPLETED";
90
+ const hasLogs = deploymentHasLogs(deployment?.status);
91
+ const handleViewLogs = () => {
92
+ if (!deployment) return;
93
+ onClose();
94
+ openLogs(deployment.id);
95
+ };
96
+ const attributes = parseMap(deployment?.effectiveAttributes);
97
+ const attributeEntries = attributes ? Object.entries(attributes) : [];
98
+ return /* @__PURE__ */ jsxs(Dialog, { open, onClose, maxWidth: "md", fullWidth: true, children: [
99
+ /* @__PURE__ */ jsx(
100
+ DialogHeader,
101
+ {
102
+ icon: /* @__PURE__ */ jsx(HistoryIcon, {}),
103
+ actions: /* @__PURE__ */ jsx(IconButton, { onClick: onClose, "aria-label": "Close deployment details", children: /* @__PURE__ */ jsx(CloseIcon, {}) }),
104
+ children: heading
105
+ }
106
+ ),
107
+ /* @__PURE__ */ jsx(Body, { children: loading ? /* @__PURE__ */ jsx(Centered, { children: /* @__PURE__ */ jsx(LoadingIndicator, {}) }) : error ? /* @__PURE__ */ jsx(Alert, { severity: "error", children: String(error.message ?? error) }) : deployment ? /* @__PURE__ */ jsxs(Fragment, { children: [
108
+ /* @__PURE__ */ jsxs(SummaryCard, { children: [
109
+ /* @__PURE__ */ jsxs(SummaryHeader, { children: [
110
+ /* @__PURE__ */ jsxs(SummaryHeaderLeft, { children: [
111
+ /* @__PURE__ */ jsx(
112
+ InstanceStatusPill,
113
+ {
114
+ status: composeInstanceStatus(
115
+ deployment.action,
116
+ deployment.status
117
+ ),
118
+ onClick: hasLogs ? handleViewLogs : void 0
119
+ }
120
+ ),
121
+ deployment.version ? /* @__PURE__ */ jsx(VersionBadge, { version: deployment.version }) : null
122
+ ] }),
123
+ isProposed ? /* @__PURE__ */ jsx(DisabledApprovalCluster, {}) : /* @__PURE__ */ jsxs(HeaderActions, { children: [
124
+ isRollbackEligible ? /* @__PURE__ */ jsx(DisabledRollbackButton, {}) : null,
125
+ hasLogs ? /* @__PURE__ */ jsx(LogsButton, { onClick: handleViewLogs }) : null
126
+ ] })
127
+ ] }),
128
+ /* @__PURE__ */ jsxs(DefList, { children: [
129
+ /* @__PURE__ */ jsxs(DefRow, { children: [
130
+ /* @__PURE__ */ jsx(DefLabel, { children: "Status" }),
131
+ /* @__PURE__ */ jsx(DefValue, { children: statusLabel })
132
+ ] }),
133
+ /* @__PURE__ */ jsxs(DefRow, { children: [
134
+ /* @__PURE__ */ jsx(DefLabel, { children: "Occurred" }),
135
+ /* @__PURE__ */ jsxs(DefValue, { children: [
136
+ time,
137
+ absoluteDate ? /* @__PURE__ */ jsx(DefMuted, { children: ` \xB7 ${absoluteDate}` }) : null
138
+ ] })
139
+ ] }),
140
+ /* @__PURE__ */ jsxs(DefRow, { children: [
141
+ /* @__PURE__ */ jsx(DefLabel, { children: "Duration" }),
142
+ /* @__PURE__ */ jsx(DefValue, { children: elapsed ?? "\u2014" })
143
+ ] }),
144
+ /* @__PURE__ */ jsxs(DefRow, { children: [
145
+ /* @__PURE__ */ jsx(DefLabel, { children: "Deployed by" }),
146
+ /* @__PURE__ */ jsx(DefValue, { children: /* @__PURE__ */ jsx("strong", { children: deployedBy }) })
147
+ ] }),
148
+ /* @__PURE__ */ jsxs(DefRow, { children: [
149
+ /* @__PURE__ */ jsx(DefLabel, { children: "Deployment ID" }),
150
+ /* @__PURE__ */ jsxs(DefValue, { children: [
151
+ /* @__PURE__ */ jsx(Mono, { children: deployment.id }),
152
+ /* @__PURE__ */ jsx(
153
+ CopyButton,
154
+ {
155
+ text: deployment.id,
156
+ ariaLabel: "Copy deployment ID"
157
+ }
158
+ )
159
+ ] })
160
+ ] })
161
+ ] }),
162
+ planSource ? /* @__PURE__ */ jsxs(PlanSourceBlock, { children: [
163
+ /* @__PURE__ */ jsxs(
164
+ PlanSourceLink,
165
+ {
166
+ variant: "text",
167
+ size: "small",
168
+ onClick: () => onShowSource(planSource.sourceId),
169
+ children: [
170
+ "Planned deployment of",
171
+ " ",
172
+ truncateDeploymentId(planSource.sourceId)
173
+ ]
174
+ }
175
+ ),
176
+ displayMessage ? /* @__PURE__ */ jsxs(MessageQuote, { children: [
177
+ '"',
178
+ displayMessage,
179
+ '"'
180
+ ] }) : null
181
+ ] }) : rollbackSource ? /* @__PURE__ */ jsxs(PlanSourceBlock, { children: [
182
+ /* @__PURE__ */ jsxs(
183
+ PlanSourceLink,
184
+ {
185
+ variant: "text",
186
+ size: "small",
187
+ onClick: () => onShowSource(rollbackSource.sourceId),
188
+ children: [
189
+ isProposed ? "Proposed rollback to deployment" : "Rollback to deployment",
190
+ " ",
191
+ truncateDeploymentId(rollbackSource.sourceId),
192
+ rollbackSource.version ? ` (v${rollbackSource.version})` : ""
193
+ ]
194
+ }
195
+ ),
196
+ displayMessage ? /* @__PURE__ */ jsxs(MessageQuote, { children: [
197
+ '"',
198
+ displayMessage,
199
+ '"'
200
+ ] }) : null
201
+ ] }) : displayMessage ? /* @__PURE__ */ jsxs(MessageQuote, { children: [
202
+ '"',
203
+ displayMessage,
204
+ '"'
205
+ ] }) : null
206
+ ] }),
207
+ /* @__PURE__ */ jsxs(Section, { children: [
208
+ /* @__PURE__ */ jsx(SectionHeading, { variant: "subtitle1", children: "Attributes" }),
209
+ /* @__PURE__ */ jsx(Card, { children: attributeEntries.length === 0 ? /* @__PURE__ */ jsx(EmptyNote, { children: "No effective attributes." }) : attributeEntries.map(([key, attrValue]) => /* @__PURE__ */ jsxs(RowLine, { children: [
210
+ /* @__PURE__ */ jsx(MonoLabel, { title: key, children: key }),
211
+ /* @__PURE__ */ jsx(MonoValue, { title: formatAttributeValue(attrValue), children: formatAttributeValue(attrValue) })
212
+ ] }, key)) })
213
+ ] }),
214
+ /* @__PURE__ */ jsxs(Section, { children: [
215
+ /* @__PURE__ */ jsx(SectionHeading, { variant: "subtitle1", children: "Snapshot params" }),
216
+ /* @__PURE__ */ jsx(
217
+ DataList,
218
+ {
219
+ rows: paramRows,
220
+ columns: COLUMNS,
221
+ searchable: true,
222
+ searchPlaceholder: "Search path\u2026",
223
+ defaultSort: { field: "path", direction: "asc" },
224
+ defaultPageSize: 5,
225
+ variant: "outlined",
226
+ size: "small",
227
+ emptyMessage: "No parameters captured for this deployment."
228
+ }
229
+ )
230
+ ] })
231
+ ] }) : null }),
232
+ /* @__PURE__ */ jsx(DialogActions, { children: /* @__PURE__ */ jsx(Button, { variant: "contained", onClick: onClose, children: "Close" }) })
233
+ ] });
234
+ };
235
+ const Body = stylin(DialogContent)(({ theme }) => ({
236
+ display: "flex",
237
+ flexDirection: "column",
238
+ gap: theme.spacing(2),
239
+ "& > *": {
240
+ flexShrink: 0
241
+ }
242
+ }));
243
+ const Centered = stylin(Box)(({ theme }) => ({
244
+ display: "flex",
245
+ justifyContent: "center",
246
+ padding: theme.spacing(6)
247
+ }));
248
+ const SummaryCard = stylin(Box)(({ theme }) => ({
249
+ display: "flex",
250
+ flexDirection: "column",
251
+ gap: theme.spacing(2.5),
252
+ padding: theme.spacing(2.5, 3),
253
+ borderRadius: 1,
254
+ border: `1px solid ${theme.palette.divider}`,
255
+ backgroundColor: theme.palette.background.paper
256
+ }));
257
+ const SummaryHeader = stylin(Box)(({ theme }) => ({
258
+ display: "flex",
259
+ alignItems: "center",
260
+ justifyContent: "space-between",
261
+ flexWrap: "wrap",
262
+ gap: theme.spacing(1.5)
263
+ }));
264
+ const SummaryHeaderLeft = stylin(Box)(({ theme }) => ({
265
+ display: "flex",
266
+ alignItems: "center",
267
+ flexWrap: "wrap",
268
+ gap: theme.spacing(1.5)
269
+ }));
270
+ const HeaderActions = stylin(Box)(({ theme }) => ({
271
+ display: "flex",
272
+ alignItems: "center",
273
+ gap: theme.spacing(1)
274
+ }));
275
+ const DefList = stylin(Box)(({ theme }) => ({
276
+ display: "flex",
277
+ flexDirection: "column",
278
+ gap: theme.spacing(1.25)
279
+ }));
280
+ const DefRow = stylin(Box)(({ theme }) => ({
281
+ display: "grid",
282
+ gridTemplateColumns: `${theme.spacing(18)} 1fr`,
283
+ alignItems: "center",
284
+ gap: theme.spacing(2),
285
+ [theme.breakpoints.down("sm")]: {
286
+ gridTemplateColumns: "1fr",
287
+ gap: theme.spacing(0.25)
288
+ }
289
+ }));
290
+ const DefLabel = stylin(Typography)(({ theme }) => ({
291
+ color: theme.palette.text.secondary,
292
+ fontSize: theme.typography.body2.fontSize,
293
+ textTransform: "uppercase",
294
+ letterSpacing: "0.04em",
295
+ fontWeight: theme.typography.fontWeightMedium
296
+ }));
297
+ const DefValue = stylin(Typography)(({ theme }) => ({
298
+ color: theme.palette.text.primary,
299
+ fontSize: theme.typography.body1.fontSize,
300
+ display: "flex",
301
+ alignItems: "center",
302
+ gap: theme.spacing(0.75),
303
+ minWidth: 0
304
+ }));
305
+ const DefMuted = stylin("span")(({ theme }) => ({
306
+ color: theme.palette.text.secondary
307
+ }));
308
+ const Mono = stylin("span")(({ theme }) => ({
309
+ fontFamily: theme.typography.fontFamilyMono,
310
+ fontSize: theme.typography.body2.fontSize,
311
+ color: theme.palette.text.primary,
312
+ wordBreak: "break-all",
313
+ minWidth: 0
314
+ }));
315
+ const MessageQuote = stylin(Box)(({ theme }) => ({
316
+ fontStyle: "italic",
317
+ color: theme.palette.text.secondary,
318
+ borderLeft: `3px solid ${theme.palette.divider}`,
319
+ paddingLeft: theme.spacing(1.5),
320
+ paddingTop: theme.spacing(0.5),
321
+ paddingBottom: theme.spacing(0.5)
322
+ }));
323
+ const PlanSourceBlock = stylin(Box)(({ theme }) => ({
324
+ display: "flex",
325
+ flexDirection: "column",
326
+ gap: theme.spacing(1),
327
+ alignItems: "flex-start"
328
+ }));
329
+ const PlanSourceLink = stylin(Button)(({ theme }) => ({
330
+ alignSelf: "flex-start",
331
+ padding: theme.spacing(0.25, 1),
332
+ marginLeft: theme.spacing(-1)
333
+ }));
334
+ const Section = stylin(Box)(({ theme }) => ({
335
+ display: "flex",
336
+ flexDirection: "column",
337
+ gap: theme.spacing(1)
338
+ }));
339
+ const SectionHeading = stylin(Typography)(({ theme }) => ({
340
+ fontWeight: theme.typography.fontWeightBold
341
+ }));
342
+ const Card = stylin(Box)(({ theme }) => ({
343
+ border: `1px solid ${theme.palette.divider}`,
344
+ borderRadius: 1,
345
+ padding: theme.spacing(1),
346
+ display: "flex",
347
+ flexDirection: "column",
348
+ gap: theme.spacing(0.5),
349
+ overflow: "hidden"
350
+ }));
351
+ const RowLine = stylin(Box)(({ theme }) => ({
352
+ display: "flex",
353
+ alignItems: "center",
354
+ gap: theme.spacing(1),
355
+ flexWrap: "wrap",
356
+ minWidth: 0
357
+ }));
358
+ const MonoLabel = stylin(Typography)(({ theme }) => ({
359
+ fontSize: theme.typography.pxToRem(11),
360
+ color: theme.palette.text.secondary,
361
+ minWidth: 110,
362
+ fontFamily: theme.typography.fontFamilyMono,
363
+ overflow: "hidden",
364
+ textOverflow: "ellipsis",
365
+ whiteSpace: "nowrap"
366
+ }));
367
+ const MonoValue = stylin(Typography)(({ theme }) => ({
368
+ fontSize: theme.typography.pxToRem(12),
369
+ color: theme.palette.text.primary,
370
+ fontFamily: theme.typography.fontFamilyMono,
371
+ overflow: "hidden",
372
+ textOverflow: "ellipsis",
373
+ whiteSpace: "nowrap",
374
+ flex: 1,
375
+ minWidth: 0
376
+ }));
377
+ const EmptyNote = stylin(Typography)(({ theme }) => ({
378
+ fontSize: theme.typography.pxToRem(12),
379
+ color: theme.palette.text.secondary,
380
+ fontStyle: "italic"
381
+ }));
382
+
383
+ export { ViewDeploymentDetails, ViewDeploymentDetails as default };
384
+ //# sourceMappingURL=ViewDeploymentDetails.esm.js.map