@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,281 @@
1
+ const MONEY = `{ amount currency }`;
2
+ const PANEL_QUERY = `
3
+ query MassdriverInstancePanel($organizationId: ID!, $id: ID!) {
4
+ instance(organizationId: $organizationId, id: $id) {
5
+ id
6
+ name
7
+ status
8
+ version
9
+ createdAt
10
+ updatedAt
11
+ environment { id name }
12
+ component { id name }
13
+ cost {
14
+ lastDay ${MONEY}
15
+ lastMonth ${MONEY}
16
+ dailyAverage ${MONEY}
17
+ monthlyAverage ${MONEY}
18
+ }
19
+ secretFields { name required title description sha256 }
20
+ alarms(cursor: { limit: 50 }) {
21
+ cursor { next }
22
+ items { id currentState { id status } }
23
+ }
24
+ }
25
+ }
26
+ `;
27
+ const OVERVIEW_QUERY = `
28
+ query MassdriverInstanceOverview($organizationId: ID!, $id: ID!) {
29
+ instance(organizationId: $organizationId, id: $id) {
30
+ id
31
+ name
32
+ status
33
+ version
34
+ resolvedVersion
35
+ deployedVersion
36
+ availableUpgrade
37
+ effectiveAttributes
38
+ bundle { id name version description }
39
+ properties { name path value }
40
+ alarms(cursor: { limit: 50 }) {
41
+ cursor { next }
42
+ items {
43
+ id
44
+ displayName
45
+ cloudResourceId
46
+ comparisonOperator
47
+ threshold
48
+ period
49
+ metric {
50
+ namespace
51
+ name
52
+ statistic
53
+ dimensions { name value }
54
+ }
55
+ currentState { id status message occurredAt }
56
+ }
57
+ }
58
+ }
59
+ }
60
+ `;
61
+ const RESOURCES_QUERY = `
62
+ query MassdriverInstanceResources($organizationId: ID!, $id: ID!) {
63
+ instance(organizationId: $organizationId, id: $id) {
64
+ id
65
+ status
66
+ bundle {
67
+ id
68
+ resources {
69
+ name
70
+ required
71
+ resourceType { id name icon }
72
+ }
73
+ }
74
+ resources {
75
+ field
76
+ required
77
+ resourceType { id name icon }
78
+ resource {
79
+ id
80
+ name
81
+ origin
82
+ formats
83
+ payload
84
+ createdAt
85
+ updatedAt
86
+ instance { id name }
87
+ }
88
+ }
89
+ }
90
+ }
91
+ `;
92
+ const RESOURCE_CONSUMERS_QUERY = `
93
+ query MassdriverResourceConsumers($organizationId: ID!, $id: ID!) {
94
+ resource(organizationId: $organizationId, id: $id) {
95
+ id
96
+ connections(cursor: { limit: 50 }) {
97
+ cursor { next }
98
+ items {
99
+ id
100
+ fromField
101
+ toField
102
+ fromInstance { id name }
103
+ toInstance { id name }
104
+ }
105
+ }
106
+ environmentDefaults(cursor: { limit: 50 }) {
107
+ cursor { next }
108
+ items {
109
+ id
110
+ environment { id name project { id name } }
111
+ }
112
+ }
113
+ remoteReferences(cursor: { limit: 50 }) {
114
+ cursor { next }
115
+ items {
116
+ id
117
+ field
118
+ instance { id name }
119
+ }
120
+ }
121
+ grants(cursor: { limit: 50 }) {
122
+ cursor { next }
123
+ items { id action recipientConditions }
124
+ }
125
+ }
126
+ }
127
+ `;
128
+ const DEPENDENCIES_QUERY = `
129
+ query MassdriverInstanceDependencies($organizationId: ID!, $id: ID!) {
130
+ instance(organizationId: $organizationId, id: $id) {
131
+ id
132
+ status
133
+ bundle {
134
+ id
135
+ dependencies {
136
+ name
137
+ required
138
+ resourceType { id name icon connectionOrientation }
139
+ }
140
+ }
141
+ dependencies {
142
+ field
143
+ required
144
+ resource { id name }
145
+ resourceType { id name icon connectionOrientation }
146
+ source {
147
+ __typename
148
+ ... on Connection {
149
+ id
150
+ fromField
151
+ fromInstance {
152
+ id
153
+ name
154
+ status
155
+ environment { id }
156
+ }
157
+ link { id fromComponent { id name } }
158
+ }
159
+ ... on RemoteReference {
160
+ id
161
+ resource { id name resourceType { id name icon } }
162
+ }
163
+ ... on EnvironmentDefault {
164
+ id
165
+ resource { id name resourceType { id name icon } }
166
+ }
167
+ }
168
+ }
169
+ }
170
+ }
171
+ `;
172
+ const ALARMS_QUERY = `
173
+ query MassdriverInstanceAlarms($organizationId: ID!, $id: ID!) {
174
+ instance(organizationId: $organizationId, id: $id) {
175
+ id
176
+ alarms(cursor: { limit: 100 }) {
177
+ cursor { next }
178
+ items {
179
+ id
180
+ displayName
181
+ cloudResourceId
182
+ comparisonOperator
183
+ threshold
184
+ period
185
+ metric {
186
+ namespace
187
+ name
188
+ statistic
189
+ dimensions { name value }
190
+ }
191
+ currentState { id status message occurredAt }
192
+ }
193
+ }
194
+ }
195
+ }
196
+ `;
197
+ const HISTORY_QUERY = `
198
+ query MassdriverInstanceHistory(
199
+ $organizationId: ID!
200
+ $instanceId: ID!
201
+ $filter: DeploymentsFilter
202
+ $sort: DeploymentsSort
203
+ ) {
204
+ deployments(
205
+ organizationId: $organizationId
206
+ filter: $filter
207
+ sort: $sort
208
+ cursor: { limit: 50 }
209
+ ) {
210
+ cursor { next }
211
+ items {
212
+ id
213
+ status
214
+ action
215
+ version
216
+ message
217
+ createdAt
218
+ updatedAt
219
+ lastTransitionedAt
220
+ elapsedTime
221
+ deployedBy
222
+ }
223
+ }
224
+ instance(organizationId: $organizationId, id: $instanceId) {
225
+ id
226
+ createdAt
227
+ environment { id name }
228
+ }
229
+ }
230
+ `;
231
+ const DEPLOYMENT_QUERY = `
232
+ query MassdriverDeployment($organizationId: ID!, $id: UUID!) {
233
+ deployment(organizationId: $organizationId, id: $id) {
234
+ id
235
+ status
236
+ action
237
+ version
238
+ message
239
+ params
240
+ effectiveAttributes
241
+ createdAt
242
+ lastTransitionedAt
243
+ elapsedTime
244
+ deployedBy
245
+ instance {
246
+ id
247
+ component { id name }
248
+ }
249
+ }
250
+ }
251
+ `;
252
+ const DEPLOYMENT_LOGS_QUERY = `
253
+ query MassdriverDeploymentLogs($organizationId: ID!, $id: UUID!) {
254
+ deployment(organizationId: $organizationId, id: $id) {
255
+ id
256
+ status
257
+ action
258
+ version
259
+ instance {
260
+ id
261
+ component { id name }
262
+ }
263
+ logs {
264
+ timestamp
265
+ message
266
+ }
267
+ }
268
+ }
269
+ `;
270
+ const GUIDE_QUERY = `
271
+ query MassdriverInstanceGuide($organizationId: ID!, $id: ID!) {
272
+ instance(organizationId: $organizationId, id: $id) {
273
+ id
274
+ operatorGuide
275
+ bundle { id name version }
276
+ }
277
+ }
278
+ `;
279
+
280
+ export { ALARMS_QUERY, DEPENDENCIES_QUERY, DEPLOYMENT_LOGS_QUERY, DEPLOYMENT_QUERY, GUIDE_QUERY, HISTORY_QUERY, OVERVIEW_QUERY, PANEL_QUERY, RESOURCES_QUERY, RESOURCE_CONSUMERS_QUERY };
281
+ //# sourceMappingURL=queries.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queries.esm.js","sources":["../../../../src/features/environment/InstanceDrawer/queries.ts"],"sourcesContent":["// GraphQL documents for the read-only instance drawer. All are proxied through\n// the backend relay, which injects `organizationId`, so callers pass only the\n// remaining variables (see api.ts). Every normalizable selection includes `id`.\n\nconst MONEY = `{ amount currency }`;\n\nexport const PANEL_QUERY = `\n query MassdriverInstancePanel($organizationId: ID!, $id: ID!) {\n instance(organizationId: $organizationId, id: $id) {\n id\n name\n status\n version\n createdAt\n updatedAt\n environment { id name }\n component { id name }\n cost {\n lastDay ${MONEY}\n lastMonth ${MONEY}\n dailyAverage ${MONEY}\n monthlyAverage ${MONEY}\n }\n secretFields { name required title description sha256 }\n alarms(cursor: { limit: 50 }) {\n cursor { next }\n items { id currentState { id status } }\n }\n }\n }\n`;\n\nexport const OVERVIEW_QUERY = `\n query MassdriverInstanceOverview($organizationId: ID!, $id: ID!) {\n instance(organizationId: $organizationId, id: $id) {\n id\n name\n status\n version\n resolvedVersion\n deployedVersion\n availableUpgrade\n effectiveAttributes\n bundle { id name version description }\n properties { name path value }\n alarms(cursor: { limit: 50 }) {\n cursor { next }\n items {\n id\n displayName\n cloudResourceId\n comparisonOperator\n threshold\n period\n metric {\n namespace\n name\n statistic\n dimensions { name value }\n }\n currentState { id status message occurredAt }\n }\n }\n }\n }\n`;\n\nexport const RESOURCES_QUERY = `\n query MassdriverInstanceResources($organizationId: ID!, $id: ID!) {\n instance(organizationId: $organizationId, id: $id) {\n id\n status\n bundle {\n id\n resources {\n name\n required\n resourceType { id name icon }\n }\n }\n resources {\n field\n required\n resourceType { id name icon }\n resource {\n id\n name\n origin\n formats\n payload\n createdAt\n updatedAt\n instance { id name }\n }\n }\n }\n }\n`;\n\nexport const RESOURCE_CONSUMERS_QUERY = `\n query MassdriverResourceConsumers($organizationId: ID!, $id: ID!) {\n resource(organizationId: $organizationId, id: $id) {\n id\n connections(cursor: { limit: 50 }) {\n cursor { next }\n items {\n id\n fromField\n toField\n fromInstance { id name }\n toInstance { id name }\n }\n }\n environmentDefaults(cursor: { limit: 50 }) {\n cursor { next }\n items {\n id\n environment { id name project { id name } }\n }\n }\n remoteReferences(cursor: { limit: 50 }) {\n cursor { next }\n items {\n id\n field\n instance { id name }\n }\n }\n grants(cursor: { limit: 50 }) {\n cursor { next }\n items { id action recipientConditions }\n }\n }\n }\n`;\n\nexport const DEPENDENCIES_QUERY = `\n query MassdriverInstanceDependencies($organizationId: ID!, $id: ID!) {\n instance(organizationId: $organizationId, id: $id) {\n id\n status\n bundle {\n id\n dependencies {\n name\n required\n resourceType { id name icon connectionOrientation }\n }\n }\n dependencies {\n field\n required\n resource { id name }\n resourceType { id name icon connectionOrientation }\n source {\n __typename\n ... on Connection {\n id\n fromField\n fromInstance {\n id\n name\n status\n environment { id }\n }\n link { id fromComponent { id name } }\n }\n ... on RemoteReference {\n id\n resource { id name resourceType { id name icon } }\n }\n ... on EnvironmentDefault {\n id\n resource { id name resourceType { id name icon } }\n }\n }\n }\n }\n }\n`;\n\nexport const ALARMS_QUERY = `\n query MassdriverInstanceAlarms($organizationId: ID!, $id: ID!) {\n instance(organizationId: $organizationId, id: $id) {\n id\n alarms(cursor: { limit: 100 }) {\n cursor { next }\n items {\n id\n displayName\n cloudResourceId\n comparisonOperator\n threshold\n period\n metric {\n namespace\n name\n statistic\n dimensions { name value }\n }\n currentState { id status message occurredAt }\n }\n }\n }\n }\n`;\n\n// `deployments` is capped at a single page of 50 (cursor.limit) — the web app's\n// infinite scroll is dropped as an acceptable read-only simplification, so an\n// instance with more than 50 deployments shows only its 50 most-recent. The\n// second root field (`instance`) sources the \"Initialized\" footer row.\nexport const HISTORY_QUERY = `\n query MassdriverInstanceHistory(\n $organizationId: ID!\n $instanceId: ID!\n $filter: DeploymentsFilter\n $sort: DeploymentsSort\n ) {\n deployments(\n organizationId: $organizationId\n filter: $filter\n sort: $sort\n cursor: { limit: 50 }\n ) {\n cursor { next }\n items {\n id\n status\n action\n version\n message\n createdAt\n updatedAt\n lastTransitionedAt\n elapsedTime\n deployedBy\n }\n }\n instance(organizationId: $organizationId, id: $instanceId) {\n id\n createdAt\n environment { id name }\n }\n }\n`;\n\n// Full snapshot of a single deployment for the read-only detail panel. `id` is a\n// `UUID!` here (the `deployment(id:)` field), unlike the list filter's `ID!`.\nexport const DEPLOYMENT_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 read-only logs viewer. The live tail is streamed\n// separately via the `deploymentLogs` subscription (see realtime/queries.ts).\n// `id` is a `UUID!` here, 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\nexport const GUIDE_QUERY = `\n query MassdriverInstanceGuide($organizationId: ID!, $id: ID!) {\n instance(organizationId: $organizationId, id: $id) {\n id\n operatorGuide\n bundle { id name version }\n }\n }\n`;\n"],"names":[],"mappings":"AAIA,MAAM,KAAA,GAAQ,CAAA,mBAAA,CAAA;AAEP,MAAM,WAAA,GAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAAA,EAYT,KAAK;AAAA,kBAAA,EACH,KAAK;AAAA,qBAAA,EACF,KAAK;AAAA,uBAAA,EACH,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWvB,MAAM,cAAA,GAAiB;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;AAmCvB,MAAM,eAAA,GAAkB;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;AAgCxB,MAAM,wBAAA,GAA2B;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;AAqCjC,MAAM,kBAAA,GAAqB;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;AA6C3B,MAAM,YAAA,GAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA8BrB,MAAM,aAAA,GAAgB;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;AAqCtB,MAAM,gBAAA,GAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyBzB,MAAM,qBAAA,GAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmB9B,MAAM,WAAA,GAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;"}
@@ -0,0 +1,170 @@
1
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
+ import { useState, useMemo } from 'react';
3
+ import Box from '@massdriver/ui/Box';
4
+ import Button from '@massdriver/ui/Button';
5
+ import CodeBlock from '@massdriver/ui/CodeBlock';
6
+ import TextField from '@massdriver/ui/TextField';
7
+ import ToggleButton from '@massdriver/ui/ToggleButton';
8
+ import ToggleButtonGroup from '@massdriver/ui/ToggleButtonGroup';
9
+ import Tooltip from '@massdriver/ui/Tooltip';
10
+ import Typography from '@massdriver/ui/Typography';
11
+ import stylin from '@massdriver/ui/stylin';
12
+ import { DataSourceProvider, Form } from '@massdriver/forms';
13
+ import '@mui/material/Chip';
14
+ import '@mui/material/Drawer';
15
+ import '@mui/material/OutlinedInput';
16
+ import '@mui/material/Select';
17
+ import { toggleButtonClasses } from '@mui/material/ToggleButton';
18
+ import { useInstanceApiQuery } from '../useInstanceApiQuery.esm.js';
19
+ import { TabState } from '../TabState.esm.js';
20
+ import { formsDataSource } from '../formsDataSource.esm.js';
21
+
22
+ const CONFIG_QUERY = `
23
+ query MassdriverInstanceConfig($organizationId: ID!, $id: ID!) {
24
+ instance(organizationId: $organizationId, id: $id) {
25
+ id
26
+ name
27
+ params
28
+ paramsSchema
29
+ uiSchema
30
+ }
31
+ }
32
+ `;
33
+ const FORM_VIEW_TOOLTIP = "Show the config as a form.";
34
+ const JSON_VIEW_TOOLTIP = "Show the raw JSON params.";
35
+ const PROPOSE_TOOLTIP = "This view is read-only. Open in Massdriver to propose or deploy changes.";
36
+ const parseMap = (value) => {
37
+ if (value == null) return void 0;
38
+ if (typeof value === "object") return value;
39
+ try {
40
+ return JSON.parse(value);
41
+ } catch {
42
+ return void 0;
43
+ }
44
+ };
45
+ const noop = () => {
46
+ };
47
+ const ConfigTab = ({ instanceId }) => {
48
+ const { value, loading, error } = useInstanceApiQuery(CONFIG_QUERY, instanceId);
49
+ const instance = value?.instance;
50
+ const [viewMode, setViewMode] = useState("form");
51
+ const schema = useMemo(
52
+ () => parseMap(instance?.paramsSchema),
53
+ [instance?.paramsSchema]
54
+ );
55
+ const uiSchema = useMemo(
56
+ () => parseMap(instance?.uiSchema) || {},
57
+ [instance?.uiSchema]
58
+ );
59
+ const formData = useMemo(
60
+ () => parseMap(instance?.params) ?? {},
61
+ [instance?.params]
62
+ );
63
+ return /* @__PURE__ */ jsx(TabState, { loading, error, children: schema ? /* @__PURE__ */ jsxs(Root, { children: [
64
+ /* @__PURE__ */ jsx(Header, { children: /* @__PURE__ */ jsxs(
65
+ ViewToggle,
66
+ {
67
+ value: viewMode,
68
+ exclusive: true,
69
+ size: "small",
70
+ onChange: (_event, next) => next && setViewMode(next),
71
+ "aria-label": "Config view mode",
72
+ children: [
73
+ /* @__PURE__ */ jsx(Tooltip, { title: FORM_VIEW_TOOLTIP, placement: "top", arrow: true, children: /* @__PURE__ */ jsx(ToggleButton, { value: "form", "aria-label": "Form view", children: "Form" }) }),
74
+ /* @__PURE__ */ jsx(Tooltip, { title: JSON_VIEW_TOOLTIP, placement: "top", arrow: true, children: /* @__PURE__ */ jsx(ToggleButton, { value: "json", "aria-label": "JSON view", children: "JSON" }) })
75
+ ]
76
+ }
77
+ ) }),
78
+ viewMode === "json" ? /* @__PURE__ */ jsxs(JsonViewSection, { children: [
79
+ /* @__PURE__ */ jsx(JsonViewCaption, { variant: "caption", children: "Read-only view of the raw JSON params." }),
80
+ /* @__PURE__ */ jsx(JsonCodeBlock, { children: JSON.stringify(formData ?? {}, null, 2) })
81
+ ] }) : /* @__PURE__ */ jsxs(FormSection, { children: [
82
+ /* @__PURE__ */ jsx(DataSourceProvider, { value: formsDataSource, children: /* @__PURE__ */ jsx(
83
+ Form,
84
+ {
85
+ id: "instance-config",
86
+ schema,
87
+ uiSchema,
88
+ formData,
89
+ readonly: true,
90
+ onChange: noop,
91
+ children: /* @__PURE__ */ jsx(Fragment, {})
92
+ }
93
+ ) }),
94
+ /* @__PURE__ */ jsx(MessageRow, { children: /* @__PURE__ */ jsx(
95
+ TextField,
96
+ {
97
+ label: "Deployment message",
98
+ helperText: "Optional. Shown in the deployment history.",
99
+ fullWidth: true,
100
+ multiline: true,
101
+ minRows: 1,
102
+ maxRows: 4,
103
+ value: "",
104
+ disabled: true
105
+ }
106
+ ) }),
107
+ /* @__PURE__ */ jsx(Footer, { children: /* @__PURE__ */ jsx(Tooltip, { title: PROPOSE_TOOLTIP, placement: "top", children: /* @__PURE__ */ jsx(ButtonWrap, { children: /* @__PURE__ */ jsx(Button, { variant: "outlined", disabled: true, children: "Propose" }) }) }) })
108
+ ] })
109
+ ] }) : /* @__PURE__ */ jsx(Empty, { children: /* @__PURE__ */ jsx(Typography, { variant: "body2", color: "text.secondary", children: "This instance has no configuration schema." }) }) });
110
+ };
111
+ const Root = stylin(Box)(({ theme }) => ({
112
+ display: "flex",
113
+ flexDirection: "column",
114
+ gap: theme.spacing(2)
115
+ }));
116
+ const Header = stylin(Box)(({ theme }) => ({
117
+ display: "flex",
118
+ alignItems: "center",
119
+ justifyContent: "space-between",
120
+ gap: theme.spacing(2),
121
+ paddingBottom: theme.spacing(1.5),
122
+ borderBottom: `1px solid ${theme.palette.divider}`,
123
+ minHeight: theme.spacing(5.5)
124
+ }));
125
+ const ViewToggle = stylin(ToggleButtonGroup)(({ theme }) => ({
126
+ width: theme.spacing(16),
127
+ height: theme.spacing(3.5),
128
+ [`& .${toggleButtonClasses.root}`]: {
129
+ flex: 1,
130
+ height: "100%",
131
+ fontWeight: 400,
132
+ fontSize: theme.typography.pxToRem(13),
133
+ paddingTop: 0,
134
+ paddingBottom: 0
135
+ }
136
+ }));
137
+ const FormSection = stylin(Box)(({ theme }) => ({
138
+ display: "flex",
139
+ flexDirection: "column",
140
+ gap: theme.spacing(2)
141
+ }));
142
+ const JsonViewSection = stylin(Box)(({ theme }) => ({
143
+ display: "flex",
144
+ flexDirection: "column",
145
+ gap: theme.spacing(1)
146
+ }));
147
+ const JsonCodeBlock = stylin(CodeBlock)(({ theme }) => ({
148
+ maxHeight: theme.spacing(50)
149
+ }));
150
+ const JsonViewCaption = stylin(Typography)(({ theme }) => ({
151
+ color: theme.palette.text.secondary
152
+ }));
153
+ const MessageRow = stylin(Box)({
154
+ display: "flex",
155
+ flexDirection: "column"
156
+ });
157
+ const Footer = stylin(Box)(({ theme }) => ({
158
+ display: "flex",
159
+ gap: theme.spacing(1),
160
+ marginTop: theme.spacing(1)
161
+ }));
162
+ const ButtonWrap = stylin("span")({
163
+ display: "inline-flex"
164
+ });
165
+ const Empty = stylin(Box)(({ theme }) => ({
166
+ padding: theme.spacing(2)
167
+ }));
168
+
169
+ export { ConfigTab, ConfigTab as default };
170
+ //# sourceMappingURL=ConfigTab.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfigTab.esm.js","sources":["../../../../../src/features/environment/InstanceDrawer/tabs/ConfigTab.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport Box from '@massdriver/ui/Box';\nimport Button from '@massdriver/ui/Button';\nimport CodeBlock from '@massdriver/ui/CodeBlock';\nimport TextField from '@massdriver/ui/TextField';\nimport ToggleButton from '@massdriver/ui/ToggleButton';\nimport ToggleButtonGroup from '@massdriver/ui/ToggleButtonGroup';\nimport Tooltip from '@massdriver/ui/Tooltip';\nimport Typography from '@massdriver/ui/Typography';\nimport stylin from '@massdriver/ui/stylin';\nimport { Form, DataSourceProvider } from '@massdriver/forms';\nimport { toggleButtonClasses } from '../../../../theme/muiClasses';\nimport { useInstanceApiQuery } from '../useInstanceApiQuery';\nimport { TabState } from '../TabState';\nimport { formsDataSource } from '../formsDataSource';\n\nconst CONFIG_QUERY = `\n query MassdriverInstanceConfig($organizationId: ID!, $id: ID!) {\n instance(organizationId: $organizationId, id: $id) {\n id\n name\n params\n paramsSchema\n uiSchema\n }\n }\n`;\n\nconst FORM_VIEW_TOOLTIP = 'Show the config as a form.';\nconst JSON_VIEW_TOOLTIP = 'Show the raw JSON params.';\nconst PROPOSE_TOOLTIP =\n 'This view is read-only. Open in Massdriver to propose or deploy changes.';\n\ninterface ConfigInstance {\n id: string;\n params?: string | null;\n paramsSchema?: string | null;\n uiSchema?: string | null;\n}\n\n// paramsSchema / uiSchema / params come back as JSON-encoded strings; parse to\n// objects the way the web app's `parseMap` does for the same fields.\nconst parseMap = (value: unknown): any => {\n if (value == null) return undefined;\n if (typeof value === 'object') return value;\n try {\n return JSON.parse(value as string);\n } catch {\n return undefined;\n }\n};\n\nconst noop = () => {};\n\n/**\n * Read-only instance config. Mirrors the web app's ConfigTab: a Form/JSON view\n * toggle, the schema-driven RJSF `Form` (rendered `readonly`, submit suppressed\n * via `<></>` children), the raw-params `CodeBlock`, and a disabled Propose\n * button. Everything is read-only — the drawer header's \"Open in Massdriver\"\n * deep-links here to actually edit/propose/deploy. Data-fetching fields resolve\n * through the relay via the injected `formsDataSource`.\n */\nexport const ConfigTab = ({ instanceId }: { instanceId: string | null }) => {\n const { value, loading, error } = useInstanceApiQuery<{\n instance: ConfigInstance | null;\n }>(CONFIG_QUERY, instanceId);\n const instance = value?.instance;\n\n const [viewMode, setViewMode] = useState<'form' | 'json'>('form');\n\n const schema = useMemo(\n () => parseMap(instance?.paramsSchema),\n [instance?.paramsSchema],\n );\n const uiSchema = useMemo(\n () => parseMap(instance?.uiSchema) || {},\n [instance?.uiSchema],\n );\n const formData = useMemo(\n () => parseMap(instance?.params) ?? {},\n [instance?.params],\n );\n\n return (\n <TabState loading={loading} error={error}>\n {schema ? (\n <Root>\n <Header>\n <ViewToggle\n value={viewMode}\n exclusive\n size=\"small\"\n onChange={(_event: unknown, next: 'form' | 'json' | null) =>\n next && setViewMode(next)\n }\n aria-label=\"Config view mode\"\n >\n <Tooltip title={FORM_VIEW_TOOLTIP} placement=\"top\" arrow>\n <ToggleButton value=\"form\" aria-label=\"Form view\">\n Form\n </ToggleButton>\n </Tooltip>\n <Tooltip title={JSON_VIEW_TOOLTIP} placement=\"top\" arrow>\n <ToggleButton value=\"json\" aria-label=\"JSON view\">\n JSON\n </ToggleButton>\n </Tooltip>\n </ViewToggle>\n </Header>\n\n {viewMode === 'json' ? (\n <JsonViewSection>\n <JsonViewCaption variant=\"caption\">\n Read-only view of the raw JSON params.\n </JsonViewCaption>\n <JsonCodeBlock>\n {JSON.stringify(formData ?? {}, null, 2)}\n </JsonCodeBlock>\n </JsonViewSection>\n ) : (\n <FormSection>\n <DataSourceProvider value={formsDataSource}>\n <Form\n id=\"instance-config\"\n schema={schema}\n uiSchema={uiSchema}\n formData={formData}\n readonly\n onChange={noop}\n >\n <></>\n </Form>\n </DataSourceProvider>\n\n <MessageRow>\n <TextField\n label=\"Deployment message\"\n helperText=\"Optional. Shown in the deployment history.\"\n fullWidth\n multiline\n minRows={1}\n maxRows={4}\n value=\"\"\n disabled\n />\n </MessageRow>\n\n <Footer>\n <Tooltip title={PROPOSE_TOOLTIP} placement=\"top\">\n <ButtonWrap>\n <Button variant=\"outlined\" disabled>\n Propose\n </Button>\n </ButtonWrap>\n </Tooltip>\n </Footer>\n </FormSection>\n )}\n </Root>\n ) : (\n <Empty>\n <Typography variant=\"body2\" color=\"text.secondary\">\n This instance has no configuration schema.\n </Typography>\n </Empty>\n )}\n </TabState>\n );\n};\n\nexport default ConfigTab;\n\nconst Root = stylin(Box)(({ theme }: { theme: any }) => ({\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(2),\n}));\n\nconst Header = stylin(Box)(({ theme }: { theme: any }) => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: theme.spacing(2),\n paddingBottom: theme.spacing(1.5),\n borderBottom: `1px solid ${theme.palette.divider}`,\n minHeight: theme.spacing(5.5),\n}));\n\n// Ported from apps/web/features/environments/sections/InstancePanel/tabs/ConfigTab/ConfigTab.view.js\nconst ViewToggle = stylin(ToggleButtonGroup)(({ theme }: { theme: any }) => ({\n width: theme.spacing(16),\n height: theme.spacing(3.5),\n [`& .${toggleButtonClasses.root}`]: {\n flex: 1,\n height: '100%',\n fontWeight: 400,\n fontSize: theme.typography.pxToRem(13),\n paddingTop: 0,\n paddingBottom: 0,\n },\n}));\n\nconst FormSection = stylin(Box)(({ theme }: { theme: any }) => ({\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(2),\n}));\n\nconst JsonViewSection = stylin(Box)(({ theme }: { theme: any }) => ({\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(1),\n}));\n\nconst JsonCodeBlock = stylin(CodeBlock)(({ theme }: { theme: any }) => ({\n maxHeight: theme.spacing(50),\n}));\n\nconst JsonViewCaption = stylin(Typography)(({ theme }: { theme: any }) => ({\n color: theme.palette.text.secondary,\n}));\n\nconst MessageRow = stylin(Box)({\n display: 'flex',\n flexDirection: 'column',\n});\n\nconst Footer = stylin(Box)(({ theme }: { theme: any }) => ({\n display: 'flex',\n gap: theme.spacing(1),\n marginTop: theme.spacing(1),\n}));\n\nconst ButtonWrap = stylin('span')({\n display: 'inline-flex',\n});\n\nconst Empty = stylin(Box)(({ theme }: { theme: any }) => ({\n padding: theme.spacing(2),\n}));\n"],"names":[],"mappings":"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"}