@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,55 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <svg version="1.1" id="uuid-9b8b9585-3cbe-4d4e-8f0e-f2a160e67216"
3
+ xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 401.4 111.2"
4
+ style="enable-background:new 0 0 401.4 111.2;" xml:space="preserve">
5
+ <style type="text/css">
6
+ .st0{fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;enable-background:new ;}
7
+ </style>
8
+ <path class="st0" d="M75.1,12.2L57.6,2.1c-2.4-1.4-5-2.1-7.5-2.1S45,0.7,42.6,2.1L25,12.2l0,0L7.5,22.3c-2.4,1.4-4.3,3.2-5.5,5.5
9
+ l0,0c-1.3,2.2-2,4.8-2,7.5v40.5c0,2.7,0.7,5.3,2,7.5l0,0c1.3,2.2,3.2,4.1,5.5,5.5L25,99l0,0l17.5,10.1l0,0c2.4,1.4,4.9,2.1,7.5,2.1
10
+ s5.1-0.7,7.5-2.1l0,0L75.1,99l0,0l17.5-10.1c2.4-1.4,4.3-3.2,5.5-5.5l0,0c1.3-2.2,2-4.8,2-7.5V35.3c0-2.7-0.7-5.3-2-7.5l0,0
11
+ c-1.3-2.2-3.2-4.1-5.5-5.5L75.1,12.2L75.1,12.2L75.1,12.2z M56,4.8L73.5,15l0,0L91,25.1c1.9,1.1,3.4,2.6,4.4,4.3l0,0
12
+ c1,1.7,1.5,3.8,1.5,5.9v40.5c0,2.2-0.5,4.2-1.5,5.9l0,0c-1,1.7-2.5,3.2-4.4,4.3L73.5,96.2l0,0L56,106.3l0,0
13
+ c-1.9,1.1-3.9,1.6-5.9,1.6s-4-0.5-5.9-1.6l0,0L26.6,96.2l0,0L9.1,86.1c-1.9-1.1-3.4-2.6-4.4-4.3l0,0c-1-1.7-1.5-3.8-1.5-5.9V35.3
14
+ c0-2.2,0.5-4.2,1.5-5.9l0,0c1-1.7,2.5-3.2,4.4-4.3L26.6,15l0,0L44.2,4.8c1.9-1.1,3.9-1.6,5.9-1.6S54.1,3.8,56,4.8L56,4.8z
15
+ M50.1,27.1c-7.9,0-15,3.2-20.1,8.4c-5.2,5.2-8.4,12.3-8.4,20.2s3.2,15,8.4,20.2s12.3,8.3,20.1,8.3s15-3.2,20.2-8.3
16
+ c5.2-5.2,8.3-12.3,8.3-20.2s-3.2-15-8.3-20.2S58,27.1,50.1,27.1z M68,87.2c-5.1,2.9-10.8,4.4-16.5,4.7v12.7c1.4-0.2,2.7-0.7,4-1.4
17
+ l16.2-9.4L68,87.2L68,87.2z M65.5,82.7c-4.5,2.6-9.8,4.1-15.4,4.1s-10.9-1.5-15.5-4.1l-1,1.9c5.1,2.9,10.8,4.3,16.5,4.3
18
+ s11.3-1.4,16.5-4.3C66.5,84.6,65.5,82.7,65.5,82.7z M29.4,39.8c8-7.2,33.3-7.2,41.3,0c5.4,4.6,6.2,16.8,2.8,25.3
19
+ c-6.9,17.8-41.8,17.4-47.6-1.9C23.4,54.8,24.4,44,29.4,39.8z M11.8,27.1c-1.8,1-3.1,2.4-4.1,4c-0.9,1.6-1.4,3.5-1.4,5.5v37.9
20
+ c0,2,0.5,3.9,1.4,5.5c0.9,1.6,2.3,3,4.1,4l14,8.1L32,81c-1.4-1-2.8-2.1-4-3.4c-2.7-2.7-5-6-6.5-9.6h-1.8c-1.9,0-3.6-1.3-4.1-3.1
21
+ c-0.8-3-1.2-6.1-1.2-9.3s0.4-6.4,1.2-9.3c0.5-1.9,2.1-3.1,4.1-3.1h1.8c1.6-3.6,3.8-6.8,6.5-9.5c5.6-5.6,13.4-9.1,22-9.1
22
+ s16.4,3.5,22,9.1c2.7,2.7,4.9,6,6.5,9.5h1v-7.7c-0.8-0.4-1.4-1.2-1.4-2.2c0-1.3,1.1-2.4,2.4-2.4s2.4,1.1,2.4,2.4
23
+ c0,1-0.6,1.8-1.4,2.2v7.9c1.4,0.4,2.5,1.5,2.9,3c0.8,3,1.2,6.1,1.2,9.3S85.3,62,84.5,65c-0.5,1.9-2.2,3.1-4.1,3.1h-1.8
24
+ c-1.6,3.6-3.8,6.8-6.5,9.6c-1.3,1.3-2.6,2.4-4.1,3.4l6.4,11.1l14-8.1c1.8-1,3.1-2.4,4.1-4c0.9-1.6,1.4-3.5,1.4-5.5V36.7
25
+ c0-2-0.5-3.9-1.4-5.5c-0.9-1.6-2.3-3-4.1-4L72,17.7l0,0L55.6,8.2c-1.8-1-3.6-1.5-5.5-1.5s-3.8,0.5-5.5,1.5l-16.4,9.5l0,0L11.8,27.1z
26
+ M66.4,40c-4.8-2.1-12.7-3.2-20-2.7c9.8,0.7,15.9,4.3,18.3,10.8c2.4,6.4,2,18.3-2.2,23.9c3.8-1.8,6.8-4.6,8.3-8.3
27
+ c0.9-2.3,1.4-4.9,1.7-7.4c0.2-1.9,0.2-4.7-0.2-7.4C71.5,44.5,69.5,41.4,66.4,40z M392.3,47.3c0.7-1.9,1.9-3.3,3.6-4.3
28
+ c1.6-1,3.5-1.4,5.5-1.4v8.6c-2.4-0.3-4.5,0.2-6.3,1.4c-1.9,1.2-2.8,3.3-2.8,6.2v14.3h-7.7V42.1h7.7V47.3L392.3,47.3z M373.6,54.3
29
+ h-15.2c0.4-1.9,1.3-3.4,2.7-4.5c1.4-1.1,3.1-1.6,5.1-1.6c1.8,0,3.3,0.5,4.7,1.5C372.3,50.8,373.2,52.3,373.6,54.3L373.6,54.3z
30
+ M366.9,65.9c-4.6,0-7.4-1.9-8.4-5.6H381c0.2-1.1,0.3-2.2,0.3-3.2c0-4.5-1.4-8.2-4.3-11.2s-6.5-4.5-10.9-4.5
31
+ c-4.6,0-8.4,1.5-11.4,4.5c-3,3-4.4,6.8-4.4,11.3s1.5,8.3,4.5,11.3c3,3,7,4.5,11.9,4.5c5.7,0,10.1-2.1,13-6.4l-6.2-3.6
32
+ C372.1,64.9,369.9,65.9,366.9,65.9L366.9,65.9z M342.3,42.2h8.5l-11.4,29.9h-8.8l-11.4-29.9h8.5l7.2,20.9L342.3,42.2L342.3,42.2z
33
+ M307.8,42.2v29.9h7.7V42.1C315.5,42.1,307.8,42.1,307.8,42.2z M294.2,47.3c0.7-1.9,1.9-3.3,3.6-4.3c1.6-1,3.5-1.4,5.5-1.4v8.6
34
+ c-2.4-0.3-4.5,0.2-6.3,1.4c-1.9,1.2-2.8,3.3-2.8,6.2v14.3h-7.7V42.1h7.7V47.3L294.2,47.3z M265.3,65.5c-2.4,0-4.4-0.8-6-2.4
35
+ c-1.6-1.6-2.4-3.6-2.4-6.1s0.8-4.5,2.4-6.1c1.6-1.6,3.6-2.4,6-2.4s4.4,0.8,5.9,2.4c1.5,1.6,2.3,3.6,2.3,6.1s-0.8,4.5-2.3,6.1
36
+ C269.6,64.8,267.7,65.5,265.3,65.5z M281.2,30.2l-7.7,2.1v13.4c-2.3-2.9-5.5-4.4-9.7-4.4s-7.5,1.5-10.3,4.6s-4.3,6.8-4.3,11.2
37
+ s1.4,8.2,4.3,11.2s6.3,4.6,10.3,4.6s7.4-1.5,9.7-4.4v3.5h7.7C281.2,72.1,281.2,30.2,281.2,30.2z M230.9,50.7c0,0.8,0.5,1.5,1.6,1.9
38
+ c1.1,0.5,2.3,0.9,3.9,1.3c1.5,0.4,3,0.9,4.5,1.4s2.8,1.5,3.9,2.9c1.1,1.4,1.6,3,1.6,5.1c0,3.1-1.1,5.4-3.4,7.1
39
+ c-2.3,1.7-5.1,2.5-8.6,2.5c-6.1,0-10.3-2.4-12.6-7.1l6.7-3.8c0.9,2.6,2.8,3.9,5.9,3.9c2.8,0,4.1-0.9,4.1-2.6c0-0.8-0.5-1.5-1.6-1.9
40
+ c-1.1-0.5-2.3-1-3.9-1.3c-1.5-0.4-3-0.9-4.5-1.5s-2.8-1.5-3.9-2.8c-1.1-1.3-1.6-2.9-1.6-4.9c0-3,1.1-5.3,3.3-7s4.9-2.5,8.1-2.5
41
+ c2.4,0,4.6,0.5,6.6,1.7c2,1.1,3.6,2.7,4.7,4.7l-6.6,3.6c-1-2-2.6-3-4.8-3c-1,0-1.8,0.2-2.5,0.7C231.2,49.3,230.9,49.9,230.9,50.7
42
+ L230.9,50.7z M206.5,52.6c-1.1-0.5-1.6-1.2-1.6-1.9s0.3-1.4,1-1.8c0.7-0.4,1.5-0.7,2.5-0.7c2.2,0,3.8,1,4.8,3l6.6-3.6
43
+ c-1.2-2-2.7-3.6-4.7-4.7c-2-1.1-4.2-1.7-6.6-1.7c-3.2,0-5.9,0.8-8.1,2.5c-2.2,1.7-3.3,4-3.3,7c0,2,0.5,3.6,1.6,4.9
44
+ c1.1,1.3,2.3,2.2,3.9,2.8c1.5,0.6,3,1.1,4.5,1.5s2.8,0.8,3.9,1.3s1.6,1.2,1.6,1.9c0,1.7-1.4,2.6-4.1,2.6c-3,0-5-1.3-5.9-3.9
45
+ l-6.7,3.8c2.2,4.8,6.4,7.1,12.6,7.1c3.4,0,6.3-0.8,8.6-2.5c2.3-1.7,3.4-4,3.4-7.1c0-2-0.5-3.7-1.6-5.1c-1.1-1.4-2.3-2.3-3.9-2.9
46
+ c-1.5-0.6-3-1.1-4.5-1.4C208.9,53.5,207.6,53.1,206.5,52.6z M170.3,63.2c1.6,1.6,3.5,2.4,5.9,2.4s4.4-0.8,5.9-2.4
47
+ c1.6-1.6,2.4-3.6,2.4-6.1s-0.8-4.5-2.4-6.1c-1.6-1.6-3.6-2.4-5.9-2.4s-4.4,0.8-5.9,2.4c-1.6,1.6-2.3,3.6-2.3,6.1
48
+ S168.7,61.6,170.3,63.2z M184.5,42.2h7.7v29.9h-7.7v-3.5c-2.3,2.9-5.6,4.4-9.8,4.4s-7.4-1.5-10.2-4.6s-4.3-6.8-4.3-11.2
49
+ s1.4-8.2,4.3-11.2c2.9-3,6.3-4.6,10.2-4.6c4.2,0,7.4,1.5,9.8,4.4V42.2L184.5,42.2z M153.4,44.7c-2.1-2.2-4.8-3.3-8.2-3.3
50
+ c-3.9,0-6.9,1.4-8.9,4.3c-1.8-2.9-4.5-4.3-8.1-4.3s-6.5,1.3-8.3,4v-3.2h-7.7v29.9h7.7V55.2c0-2.2,0.5-3.9,1.5-5
51
+ c1-1.2,2.4-1.7,4.1-1.7c1.6,0,2.8,0.5,3.7,1.5s1.3,2.4,1.3,4.2v17.9h7.7V55.3c0-2.2,0.5-3.9,1.5-5c1-1.2,2.3-1.7,4.1-1.7
52
+ c1.6,0,2.8,0.5,3.7,1.5s1.3,2.4,1.3,4.2v17.9h7.7V53.7C156.5,49.9,155.5,46.9,153.4,44.7L153.4,44.7z M307.8,31.5l7.7-1.9v7.7
53
+ l-7.7,1.9C307.8,39.2,307.8,31.5,307.8,31.5z M28.3,93.7l16.2,9.4c1.3,0.8,2.7,1.2,4,1.4V91.8c-5.7-0.2-11.3-1.8-16.5-4.7L28.3,93.7
54
+ L28.3,93.7z" />
55
+ </svg>
@@ -0,0 +1,50 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <svg version="1.1"
3
+ xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 401.4 111.2"
4
+ style="enable-background:new 0 0 401.4 111.2;" xml:space="preserve">
5
+ <style type="text/css">
6
+ .st0{fill-rule:evenodd;clip-rule:evenodd;fill:#212121;}
7
+ </style>
8
+ <path class="st0" d="M56,4.8L73.5,15l0,0L91,25.1c1.9,1.1,3.4,2.6,4.4,4.3l0,0c1,1.7,1.5,3.8,1.5,5.9v40.5c0,2.2-0.5,4.2-1.5,5.9
9
+ l0,0c-1,1.7-2.5,3.2-4.4,4.3L73.5,96.2l0,0L56,106.3l0,0c-1.9,1.1-3.9,1.6-5.9,1.6s-4-0.5-5.9-1.6l0,0L26.6,96.2l0,0L9.1,86.1
10
+ c-1.9-1.1-3.4-2.6-4.4-4.3l0,0c-1-1.7-1.5-3.8-1.5-5.9V35.3c0-2.2,0.5-4.2,1.5-5.9l0,0c1-1.7,2.5-3.2,4.4-4.3L26.6,15l0,0L44.2,4.8
11
+ c1.9-1.1,3.9-1.6,5.9-1.6S54.1,3.8,56,4.8L56,4.8z M50.1,27.1c-7.9,0-15,3.2-20.1,8.4c-5.2,5.2-8.4,12.3-8.4,20.2s3.2,15,8.4,20.2
12
+ s12.3,8.3,20.1,8.3s15-3.2,20.2-8.3c5.2-5.2,8.3-12.3,8.3-20.2s-3.2-15-8.3-20.2S58,27.1,50.1,27.1z M68,87.2
13
+ c-5.1,2.9-10.8,4.4-16.5,4.7v12.7c1.4-0.2,2.7-0.7,4-1.4l16.2-9.4L68,87.2L68,87.2z M65.5,82.7c-4.5,2.6-9.8,4.1-15.4,4.1
14
+ s-10.9-1.5-15.5-4.1l-1,1.9c5.1,2.9,10.8,4.3,16.5,4.3s11.3-1.4,16.5-4.3C66.5,84.6,65.5,82.7,65.5,82.7z M29.4,39.8
15
+ c8-7.2,33.3-7.2,41.3,0c5.4,4.6,6.2,16.8,2.8,25.3c-6.9,17.8-41.8,17.4-47.6-1.9C23.4,54.8,24.4,44,29.4,39.8z M11.8,27.1
16
+ c-1.8,1-3.1,2.4-4.1,4c-0.9,1.6-1.4,3.5-1.4,5.5v37.9c0,2,0.5,3.9,1.4,5.5s2.3,3,4.1,4l14,8.1L32,81c-1.4-1-2.8-2.1-4-3.4
17
+ c-2.7-2.7-5-6-6.5-9.6h-1.8c-1.9,0-3.6-1.3-4.1-3.1c-0.8-3-1.2-6.1-1.2-9.3s0.4-6.4,1.2-9.3c0.5-1.9,2.1-3.1,4.1-3.1h1.8
18
+ c1.6-3.6,3.8-6.8,6.5-9.5c5.6-5.6,13.4-9.1,22-9.1s16.4,3.5,22,9.1c2.7,2.7,4.9,6,6.5,9.5h1v-7.7c-0.8-0.4-1.4-1.2-1.4-2.2
19
+ c0-1.3,1.1-2.4,2.4-2.4s2.4,1.1,2.4,2.4c0,1-0.6,1.8-1.4,2.2v7.9c1.4,0.4,2.5,1.5,2.9,3c0.8,3,1.2,6.1,1.2,9.3S85.3,62,84.5,65
20
+ c-0.5,1.9-2.2,3.1-4.1,3.1h-1.8c-1.6,3.6-3.8,6.8-6.5,9.6c-1.3,1.3-2.6,2.4-4.1,3.4l6.4,11.1l14-8.1c1.8-1,3.1-2.4,4.1-4
21
+ c0.9-1.6,1.4-3.5,1.4-5.5V36.7c0-2-0.5-3.9-1.4-5.5c-0.9-1.6-2.3-3-4.1-4L72,17.7l0,0L55.6,8.2c-1.8-1-3.6-1.5-5.5-1.5
22
+ s-3.8,0.5-5.5,1.5l-16.4,9.5l0,0L11.8,27.1z M66.4,40c-4.8-2.1-12.7-3.2-20-2.7c9.8,0.7,15.9,4.3,18.3,10.8c2.4,6.4,2,18.3-2.2,23.9
23
+ c3.8-1.8,6.8-4.6,8.3-8.3c0.9-2.3,1.4-4.9,1.7-7.4c0.2-1.9,0.2-4.7-0.2-7.4C71.5,44.5,69.5,41.4,66.4,40z M392.3,47.3
24
+ c0.7-1.9,1.9-3.3,3.6-4.3c1.6-1,3.5-1.4,5.5-1.4v8.6c-2.4-0.3-4.5,0.2-6.3,1.4c-1.9,1.2-2.8,3.3-2.8,6.2v14.3h-7.7v-30h7.7
25
+ L392.3,47.3L392.3,47.3z M373.6,54.3h-15.2c0.4-1.9,1.3-3.4,2.7-4.5c1.4-1.1,3.1-1.6,5.1-1.6c1.8,0,3.3,0.5,4.7,1.5
26
+ C372.3,50.8,373.2,52.3,373.6,54.3L373.6,54.3z M366.9,65.9c-4.6,0-7.4-1.9-8.4-5.6H381c0.2-1.1,0.3-2.2,0.3-3.2
27
+ c0-4.5-1.4-8.2-4.3-11.2s-6.5-4.5-10.9-4.5c-4.6,0-8.4,1.5-11.4,4.5s-4.4,6.8-4.4,11.3s1.5,8.3,4.5,11.3s7,4.5,11.9,4.5
28
+ c5.7,0,10.1-2.1,13-6.4l-6.2-3.6C372.1,64.9,369.9,65.9,366.9,65.9L366.9,65.9z M342.3,42.2h8.5l-11.4,29.9h-8.8l-11.4-29.9h8.5
29
+ l7.2,20.9L342.3,42.2L342.3,42.2z M307.8,42.2v29.9h7.7v-30C315.5,42.1,307.8,42.1,307.8,42.2z M294.2,47.3c0.7-1.9,1.9-3.3,3.6-4.3
30
+ c1.6-1,3.5-1.4,5.5-1.4v8.6c-2.4-0.3-4.5,0.2-6.3,1.4c-1.9,1.2-2.8,3.3-2.8,6.2v14.3h-7.7v-30h7.7L294.2,47.3L294.2,47.3z
31
+ M265.3,65.5c-2.4,0-4.4-0.8-6-2.4s-2.4-3.6-2.4-6.1s0.8-4.5,2.4-6.1s3.6-2.4,6-2.4s4.4,0.8,5.9,2.4c1.5,1.6,2.3,3.6,2.3,6.1
32
+ s-0.8,4.5-2.3,6.1C269.6,64.8,267.7,65.5,265.3,65.5z M281.2,30.2l-7.7,2.1v13.4c-2.3-2.9-5.5-4.4-9.7-4.4s-7.5,1.5-10.3,4.6
33
+ s-4.3,6.8-4.3,11.2s1.4,8.2,4.3,11.2s6.3,4.6,10.3,4.6s7.4-1.5,9.7-4.4V72h7.7C281.2,72.1,281.2,30.2,281.2,30.2z M230.9,50.7
34
+ c0,0.8,0.5,1.5,1.6,1.9c1.1,0.5,2.3,0.9,3.9,1.3c1.5,0.4,3,0.9,4.5,1.4s2.8,1.5,3.9,2.9c1.1,1.4,1.6,3,1.6,5.1
35
+ c0,3.1-1.1,5.4-3.4,7.1c-2.3,1.7-5.1,2.5-8.6,2.5c-6.1,0-10.3-2.4-12.6-7.1l6.7-3.8c0.9,2.6,2.8,3.9,5.9,3.9c2.8,0,4.1-0.9,4.1-2.6
36
+ c0-0.8-0.5-1.5-1.6-1.9c-1.1-0.5-2.3-1-3.9-1.3c-1.5-0.4-3-0.9-4.5-1.5s-2.8-1.5-3.9-2.8c-1.1-1.3-1.6-2.9-1.6-4.9
37
+ c0-3,1.1-5.3,3.3-7s4.9-2.5,8.1-2.5c2.4,0,4.6,0.5,6.6,1.7c2,1.1,3.6,2.7,4.7,4.7l-6.6,3.6c-1-2-2.6-3-4.8-3c-1,0-1.8,0.2-2.5,0.7
38
+ C231.2,49.3,230.9,49.9,230.9,50.7L230.9,50.7z M206.5,52.6c-1.1-0.5-1.6-1.2-1.6-1.9s0.3-1.4,1-1.8c0.7-0.4,1.5-0.7,2.5-0.7
39
+ c2.2,0,3.8,1,4.8,3l6.6-3.6c-1.2-2-2.7-3.6-4.7-4.7c-2-1.1-4.2-1.7-6.6-1.7c-3.2,0-5.9,0.8-8.1,2.5c-2.2,1.7-3.3,4-3.3,7
40
+ c0,2,0.5,3.6,1.6,4.9c1.1,1.3,2.3,2.2,3.9,2.8c1.5,0.6,3,1.1,4.5,1.5s2.8,0.8,3.9,1.3s1.6,1.2,1.6,1.9c0,1.7-1.4,2.6-4.1,2.6
41
+ c-3,0-5-1.3-5.9-3.9l-6.7,3.8c2.2,4.8,6.4,7.1,12.6,7.1c3.4,0,6.3-0.8,8.6-2.5s3.4-4,3.4-7.1c0-2-0.5-3.7-1.6-5.1
42
+ c-1.1-1.4-2.3-2.3-3.9-2.9c-1.5-0.6-3-1.1-4.5-1.4C208.9,53.5,207.6,53.1,206.5,52.6z M170.3,63.2c1.6,1.6,3.5,2.4,5.9,2.4
43
+ s4.4-0.8,5.9-2.4c1.6-1.6,2.4-3.6,2.4-6.1s-0.8-4.5-2.4-6.1c-1.6-1.6-3.6-2.4-5.9-2.4s-4.4,0.8-5.9,2.4c-1.6,1.6-2.3,3.6-2.3,6.1
44
+ S168.7,61.6,170.3,63.2z M184.5,42.2h7.7v29.9h-7.7v-3.5c-2.3,2.9-5.6,4.4-9.8,4.4s-7.4-1.5-10.2-4.6s-4.3-6.8-4.3-11.2
45
+ s1.4-8.2,4.3-11.2c2.9-3,6.3-4.6,10.2-4.6c4.2,0,7.4,1.5,9.8,4.4V42.2L184.5,42.2z M153.4,44.7c-2.1-2.2-4.8-3.3-8.2-3.3
46
+ c-3.9,0-6.9,1.4-8.9,4.3c-1.8-2.9-4.5-4.3-8.1-4.3s-6.5,1.3-8.3,4v-3.2h-7.7v29.9h7.7V55.2c0-2.2,0.5-3.9,1.5-5
47
+ c1-1.2,2.4-1.7,4.1-1.7c1.6,0,2.8,0.5,3.7,1.5s1.3,2.4,1.3,4.2v17.9h7.7V55.3c0-2.2,0.5-3.9,1.5-5c1-1.2,2.3-1.7,4.1-1.7
48
+ c1.6,0,2.8,0.5,3.7,1.5s1.3,2.4,1.3,4.2v17.9h7.7V53.7C156.5,49.9,155.5,46.9,153.4,44.7L153.4,44.7z M307.8,31.5l7.7-1.9v7.7
49
+ l-7.7,1.9V31.5z M28.3,93.7l16.2,9.4c1.3,0.8,2.7,1.2,4,1.4V91.8C42.8,91.6,37.2,90,32,87.1L28.3,93.7L28.3,93.7z"/>
50
+ </svg>
@@ -0,0 +1,95 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import Box from '@massdriver/ui/Box';
3
+ import { col } from '@massdriver/ui/DataList';
4
+ import { HelpIconButton } from '@massdriver/ui/IconButton';
5
+ import stylin from '@massdriver/ui/stylin';
6
+ import { AttributesSummaryCell } from './AttributesSummaryCell.esm.js';
7
+
8
+ const Code = stylin("code")(({ theme }) => ({
9
+ fontFamily: theme.typography.fontFamilyMono ?? "monospace",
10
+ fontSize: "0.85em",
11
+ padding: "0 3px",
12
+ borderRadius: 3,
13
+ backgroundColor: "rgba(255,255,255,0.12)"
14
+ }));
15
+ const AttributesColumnHeader = ({
16
+ directText,
17
+ effectiveText
18
+ }) => /* @__PURE__ */ jsxs(HeaderRow, { children: [
19
+ "Attributes",
20
+ /* @__PURE__ */ jsx(
21
+ SmallHelpButton,
22
+ {
23
+ tooltip: /* @__PURE__ */ jsxs(HelpBody, { children: [
24
+ /* @__PURE__ */ jsxs(HelpSection, { children: [
25
+ /* @__PURE__ */ jsx(HelpHeading, { children: "Direct" }),
26
+ /* @__PURE__ */ jsx(HelpText, { children: directText })
27
+ ] }),
28
+ /* @__PURE__ */ jsxs(HelpSection, { children: [
29
+ /* @__PURE__ */ jsx(HelpHeading, { children: "Effective" }),
30
+ /* @__PURE__ */ jsx(HelpText, { children: effectiveText })
31
+ ] })
32
+ ] }),
33
+ size: "small"
34
+ }
35
+ )
36
+ ] });
37
+ const buildAttributesColumn = ({
38
+ directText,
39
+ effectiveText,
40
+ ...options
41
+ }) => col.custom(
42
+ "attributes",
43
+ /* @__PURE__ */ jsx(
44
+ AttributesColumnHeader,
45
+ {
46
+ directText,
47
+ effectiveText
48
+ }
49
+ ),
50
+ (_value, row) => /* @__PURE__ */ jsx(
51
+ AttributesSummaryCell,
52
+ {
53
+ direct: row.attributes,
54
+ effective: row.effectiveAttributes
55
+ }
56
+ ),
57
+ { flex: 2, minWidth: 200, sortable: false, searchable: false, ...options }
58
+ );
59
+ const HeaderRow = stylin(Box)(({ theme }) => ({
60
+ display: "inline-flex",
61
+ alignItems: "center",
62
+ gap: theme.spacing(0.5)
63
+ }));
64
+ const SmallHelpButton = stylin(HelpIconButton)({
65
+ padding: "2px",
66
+ "& svg": { fontSize: 14 }
67
+ });
68
+ const HelpBody = stylin(Box)(({ theme }) => ({
69
+ display: "flex",
70
+ flexDirection: "column",
71
+ gap: theme.spacing(1),
72
+ maxWidth: 280,
73
+ color: "inherit"
74
+ }));
75
+ const HelpSection = stylin(Box)(({ theme }) => ({
76
+ display: "flex",
77
+ flexDirection: "column",
78
+ gap: theme.spacing(0.25),
79
+ color: "inherit"
80
+ }));
81
+ const HelpHeading = stylin("div")(({ theme }) => ({
82
+ fontSize: theme.typography.pxToRem(11),
83
+ fontWeight: theme.typography.fontWeightBold,
84
+ textTransform: "uppercase",
85
+ letterSpacing: "0.06em",
86
+ opacity: 0.7
87
+ }));
88
+ const HelpText = stylin("div")(({ theme }) => ({
89
+ fontSize: theme.typography.pxToRem(12),
90
+ lineHeight: 1.5,
91
+ opacity: 0.9
92
+ }));
93
+
94
+ export { Code, buildAttributesColumn };
95
+ //# sourceMappingURL=AttributesColumn.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AttributesColumn.esm.js","sources":["../../src/components/AttributesColumn.tsx"],"sourcesContent":["import Box from '@massdriver/ui/Box';\nimport { col } from '@massdriver/ui/DataList';\nimport { HelpIconButton } from '@massdriver/ui/IconButton';\nimport stylin from '@massdriver/ui/stylin';\nimport { ReactNode } from 'react';\nimport { AttributesSummaryCell } from './AttributesSummaryCell';\n\n/** Inline `<code>`-style span, mirroring the web app's `Code`. */\nexport const Code = stylin('code')(({ theme }: { theme: any }) => ({\n fontFamily: theme.typography.fontFamilyMono ?? 'monospace',\n fontSize: '0.85em',\n padding: '0 3px',\n borderRadius: 3,\n backgroundColor: 'rgba(255,255,255,0.12)',\n}));\n\nconst AttributesColumnHeader = ({\n directText,\n effectiveText,\n}: {\n directText: ReactNode;\n effectiveText: ReactNode;\n}) => (\n <HeaderRow>\n Attributes\n <SmallHelpButton\n tooltip={\n <HelpBody>\n <HelpSection>\n <HelpHeading>Direct</HelpHeading>\n <HelpText>{directText}</HelpText>\n </HelpSection>\n <HelpSection>\n <HelpHeading>Effective</HelpHeading>\n <HelpText>{effectiveText}</HelpText>\n </HelpSection>\n </HelpBody>\n }\n size=\"small\"\n />\n </HeaderRow>\n);\n\n/** Attributes column mirroring the web app's `buildAttributesColumn`. */\nexport const buildAttributesColumn = ({\n directText,\n effectiveText,\n ...options\n}: {\n directText: ReactNode;\n effectiveText: ReactNode;\n [key: string]: unknown;\n}) =>\n col.custom(\n 'attributes',\n <AttributesColumnHeader\n directText={directText}\n effectiveText={effectiveText}\n />,\n (\n _value: unknown,\n row: { attributes?: unknown; effectiveAttributes?: unknown },\n ) => (\n <AttributesSummaryCell\n direct={row.attributes}\n effective={row.effectiveAttributes}\n />\n ),\n { flex: 2, minWidth: 200, sortable: false, searchable: false, ...options },\n );\n\nconst HeaderRow = stylin(Box)(({ theme }: { theme: any }) => ({\n display: 'inline-flex',\n alignItems: 'center',\n gap: theme.spacing(0.5),\n}));\n\nconst SmallHelpButton = stylin(HelpIconButton)({\n padding: '2px',\n '& svg': { fontSize: 14 },\n});\n\nconst HelpBody = stylin(Box)(({ theme }: { theme: any }) => ({\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(1),\n maxWidth: 280,\n color: 'inherit',\n}));\n\nconst HelpSection = stylin(Box)(({ theme }: { theme: any }) => ({\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(0.25),\n color: 'inherit',\n}));\n\nconst HelpHeading = stylin('div')(({ theme }: { theme: any }) => ({\n fontSize: theme.typography.pxToRem(11),\n fontWeight: theme.typography.fontWeightBold,\n textTransform: 'uppercase',\n letterSpacing: '0.06em',\n opacity: 0.7,\n}));\n\nconst HelpText = stylin('div')(({ theme }: { theme: any }) => ({\n fontSize: theme.typography.pxToRem(12),\n lineHeight: 1.5,\n opacity: 0.9,\n}));\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import Box from '@massdriver/ui/Box';
3
+ import Chip from '@massdriver/ui/Chip';
4
+ import Tooltip from '@massdriver/ui/Tooltip';
5
+ import Typography from '@massdriver/ui/Typography';
6
+ import stylin from '@massdriver/ui/stylin';
7
+ import { parseMap, formatAttributeValue } from '../utils/attributes.esm.js';
8
+
9
+ const toEntries = (value) => {
10
+ const parsed = parseMap(value);
11
+ return parsed ? Object.entries(parsed) : [];
12
+ };
13
+ const Group = ({
14
+ label,
15
+ entries
16
+ }) => /* @__PURE__ */ jsxs(Section, { children: [
17
+ /* @__PURE__ */ jsxs(SectionHeader, { children: [
18
+ label,
19
+ " (",
20
+ entries.length,
21
+ ")"
22
+ ] }),
23
+ entries.length === 0 ? /* @__PURE__ */ jsx(EmptyNote, { children: "None" }) : /* @__PURE__ */ jsx(BulletList, { children: entries.map(([key, value]) => /* @__PURE__ */ jsx(BulletItem, { children: `${key}: ${formatAttributeValue(
24
+ value
25
+ )}` }, key)) })
26
+ ] });
27
+ const AttributesSummaryCell = ({
28
+ direct,
29
+ effective
30
+ }) => {
31
+ const directEntries = toEntries(direct);
32
+ const effectiveEntries = toEntries(effective);
33
+ if (directEntries.length === 0 && effectiveEntries.length === 0) {
34
+ return /* @__PURE__ */ jsx(MutedText, { variant: "body2", children: "\u2014" });
35
+ }
36
+ return /* @__PURE__ */ jsx(
37
+ Tooltip,
38
+ {
39
+ arrow: true,
40
+ enterDelay: 400,
41
+ placement: "top",
42
+ title: /* @__PURE__ */ jsxs(TooltipBody, { children: [
43
+ /* @__PURE__ */ jsx(Group, { label: "Direct", entries: directEntries }),
44
+ /* @__PURE__ */ jsx(Group, { label: "Effective", entries: effectiveEntries })
45
+ ] }),
46
+ children: /* @__PURE__ */ jsx(Anchor, { children: /* @__PURE__ */ jsx(
47
+ Chip,
48
+ {
49
+ size: "small",
50
+ variant: "outlined",
51
+ label: `${directEntries.length} direct \xB7 ${effectiveEntries.length} effective`
52
+ }
53
+ ) })
54
+ }
55
+ );
56
+ };
57
+ const MutedText = stylin(Typography)(({ theme }) => ({
58
+ color: theme.palette.text.secondary
59
+ }));
60
+ const Anchor = stylin("span")({ display: "inline-flex" });
61
+ const TooltipBody = stylin(Box)(({ theme }) => ({
62
+ display: "flex",
63
+ flexDirection: "column",
64
+ gap: theme.spacing(1),
65
+ minWidth: 200,
66
+ color: "inherit"
67
+ }));
68
+ const Section = stylin(Box)(({ theme }) => ({
69
+ display: "flex",
70
+ flexDirection: "column",
71
+ gap: theme.spacing(0.25),
72
+ color: "inherit"
73
+ }));
74
+ const SectionHeader = stylin("div")(({ theme }) => ({
75
+ fontSize: theme.typography.pxToRem(10),
76
+ fontWeight: theme.typography.fontWeightBold,
77
+ textTransform: "uppercase",
78
+ letterSpacing: "0.06em",
79
+ opacity: 0.7,
80
+ color: "inherit"
81
+ }));
82
+ const BulletList = stylin("ul")(({ theme }) => ({
83
+ margin: 0,
84
+ paddingLeft: theme.spacing(2),
85
+ display: "flex",
86
+ flexDirection: "column",
87
+ gap: theme.spacing(0.25),
88
+ color: "inherit"
89
+ }));
90
+ const BulletItem = stylin("li")(({ theme }) => ({
91
+ fontSize: theme.typography.body2.fontSize,
92
+ lineHeight: 1.5,
93
+ color: "inherit"
94
+ }));
95
+ const EmptyNote = stylin("div")(({ theme }) => ({
96
+ fontSize: theme.typography.pxToRem(12),
97
+ fontStyle: "italic",
98
+ opacity: 0.7,
99
+ color: "inherit"
100
+ }));
101
+
102
+ export { AttributesSummaryCell };
103
+ //# sourceMappingURL=AttributesSummaryCell.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AttributesSummaryCell.esm.js","sources":["../../src/components/AttributesSummaryCell.tsx"],"sourcesContent":["import Box from '@massdriver/ui/Box';\nimport Chip from '@massdriver/ui/Chip';\nimport Tooltip from '@massdriver/ui/Tooltip';\nimport Typography from '@massdriver/ui/Typography';\nimport stylin from '@massdriver/ui/stylin';\nimport { formatAttributeValue, parseMap } from '../utils/attributes';\n\nconst toEntries = (value: unknown): [string, unknown][] => {\n const parsed = parseMap(value);\n return parsed ? Object.entries(parsed) : [];\n};\n\nconst Group = ({\n label,\n entries,\n}: {\n label: string;\n entries: [string, unknown][];\n}) => (\n <Section>\n <SectionHeader>\n {label} ({entries.length})\n </SectionHeader>\n {entries.length === 0 ? (\n <EmptyNote>None</EmptyNote>\n ) : (\n <BulletList>\n {entries.map(([key, value]) => (\n <BulletItem key={key}>{`${key}: ${formatAttributeValue(\n value,\n )}`}</BulletItem>\n ))}\n </BulletList>\n )}\n </Section>\n);\n\n/**\n * Read-only attributes cell mirroring the web app: a compact\n * \"N direct · M effective\" chip with a tooltip listing the entries.\n */\nexport const AttributesSummaryCell = ({\n direct,\n effective,\n}: {\n direct?: unknown;\n effective?: unknown;\n}) => {\n const directEntries = toEntries(direct);\n const effectiveEntries = toEntries(effective);\n\n if (directEntries.length === 0 && effectiveEntries.length === 0) {\n return <MutedText variant=\"body2\">—</MutedText>;\n }\n\n return (\n <Tooltip\n arrow\n enterDelay={400}\n placement=\"top\"\n title={\n <TooltipBody>\n <Group label=\"Direct\" entries={directEntries} />\n <Group label=\"Effective\" entries={effectiveEntries} />\n </TooltipBody>\n }\n >\n <Anchor>\n <Chip\n size=\"small\"\n variant=\"outlined\"\n label={`${directEntries.length} direct · ${effectiveEntries.length} effective`}\n />\n </Anchor>\n </Tooltip>\n );\n};\n\nconst MutedText = stylin(Typography)(({ theme }: { theme: any }) => ({\n color: theme.palette.text.secondary,\n}));\n\nconst Anchor = stylin('span')({ display: 'inline-flex' });\n\nconst TooltipBody = stylin(Box)(({ theme }: { theme: any }) => ({\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(1),\n minWidth: 200,\n color: 'inherit',\n}));\n\nconst Section = stylin(Box)(({ theme }: { theme: any }) => ({\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(0.25),\n color: 'inherit',\n}));\n\nconst SectionHeader = stylin('div')(({ theme }: { theme: any }) => ({\n fontSize: theme.typography.pxToRem(10),\n fontWeight: theme.typography.fontWeightBold,\n textTransform: 'uppercase',\n letterSpacing: '0.06em',\n opacity: 0.7,\n color: 'inherit',\n}));\n\nconst BulletList = stylin('ul')(({ theme }: { theme: any }) => ({\n margin: 0,\n paddingLeft: theme.spacing(2),\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(0.25),\n color: 'inherit',\n}));\n\nconst BulletItem = stylin('li')(({ theme }: { theme: any }) => ({\n fontSize: theme.typography.body2.fontSize,\n lineHeight: 1.5,\n color: 'inherit',\n}));\n\nconst EmptyNote = stylin('div')(({ theme }: { theme: any }) => ({\n fontSize: theme.typography.pxToRem(12),\n fontStyle: 'italic',\n opacity: 0.7,\n color: 'inherit',\n}));\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import IconTile from '@massdriver/ui/IconTile';
3
+ import useAuthedSvg from '../hooks/useAuthedSvg.esm.js';
4
+
5
+ const AuthedIcon = ({
6
+ url,
7
+ alt,
8
+ size = "small",
9
+ variant,
10
+ fallback
11
+ }) => {
12
+ const { svg } = useAuthedSvg(url);
13
+ return /* @__PURE__ */ jsx(
14
+ IconTile,
15
+ {
16
+ svg,
17
+ alt,
18
+ size,
19
+ variant,
20
+ fallback
21
+ }
22
+ );
23
+ };
24
+
25
+ export { AuthedIcon, AuthedIcon as default };
26
+ //# sourceMappingURL=AuthedIcon.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthedIcon.esm.js","sources":["../../src/components/AuthedIcon.tsx"],"sourcesContent":["import IconTile from '@massdriver/ui/IconTile';\nimport { ReactNode } from 'react';\nimport useAuthedSvg from '../hooks/useAuthedSvg';\n\n// Ported from apps/web/shared/components/AuthedIcon.js — renders an\n// auth-guarded SVG (e.g. an OCI repo's brand icon) in an IconTile, falling\n// back while loading or when the fetch fails.\nexport const AuthedIcon = ({\n url,\n alt,\n size = 'small',\n variant,\n fallback,\n}: {\n url?: string | null;\n alt?: string;\n size?: string;\n variant?: string;\n fallback?: ReactNode;\n}) => {\n const { svg } = useAuthedSvg(url);\n\n return (\n <IconTile\n svg={svg}\n alt={alt}\n size={size}\n variant={variant}\n fallback={fallback}\n />\n );\n};\n\nexport default AuthedIcon;\n"],"names":[],"mappings":";;;;AAOO,MAAM,aAAa,CAAC;AAAA,EACzB,GAAA;AAAA,EACA,GAAA;AAAA,EACA,IAAA,GAAO,OAAA;AAAA,EACP,OAAA;AAAA,EACA;AACF,CAAA,KAMM;AACJ,EAAA,MAAM,EAAE,GAAA,EAAI,GAAI,YAAA,CAAa,GAAG,CAAA;AAEhC,EAAA,uBACE,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,GAAA;AAAA,MACA,IAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA;AAAA,GACF;AAEJ;;;;"}
@@ -0,0 +1,48 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import Box from '@massdriver/ui/Box';
3
+ import Typography from '@massdriver/ui/Typography';
4
+ import stylin from '@massdriver/ui/stylin';
5
+ import { denormalizeConditionsFromWire } from '../utils/conditions.esm.js';
6
+
7
+ const ConditionsCell = ({
8
+ conditions,
9
+ wildcardLabel = "Applies to everything"
10
+ }) => {
11
+ const parsed = denormalizeConditionsFromWire(conditions);
12
+ const entries = Object.entries(parsed);
13
+ return entries.length === 0 ? /* @__PURE__ */ jsx(Wildcard, { variant: "body2", color: "text.secondary", children: wildcardLabel }) : /* @__PURE__ */ jsx(Wrapper, { children: entries.map(([key, value]) => /* @__PURE__ */ jsxs(ConditionPiece, { children: [
14
+ /* @__PURE__ */ jsx(Key, { children: key }),
15
+ /* @__PURE__ */ jsx(Equals, { children: Array.isArray(value) ? "\u2208" : "=" }),
16
+ /* @__PURE__ */ jsx(Value, { children: Array.isArray(value) ? `[${value.join(", ")}]` : String(value) })
17
+ ] }, key)) });
18
+ };
19
+ const Wrapper = stylin(Box)(({ theme }) => ({
20
+ display: "flex",
21
+ flexDirection: "column",
22
+ gap: theme.spacing(0.25)
23
+ }));
24
+ const ConditionPiece = stylin(Box)(({ theme }) => ({
25
+ display: "inline-flex",
26
+ alignItems: "center",
27
+ gap: theme.spacing(0.5),
28
+ fontSize: theme.typography.body2.fontSize
29
+ }));
30
+ const Key = stylin(Typography)(({ theme }) => ({
31
+ fontFamily: theme.typography.fontFamilyMono ?? "monospace",
32
+ fontSize: theme.typography.body2.fontSize,
33
+ color: theme.palette.text.primary
34
+ }));
35
+ const Equals = stylin(Typography)(({ theme }) => ({
36
+ color: theme.palette.text.secondary,
37
+ fontSize: theme.typography.body2.fontSize
38
+ }));
39
+ const Value = stylin(Typography)(({ theme }) => ({
40
+ color: theme.palette.text.primary,
41
+ fontSize: theme.typography.body2.fontSize
42
+ }));
43
+ const Wildcard = stylin(Typography)({
44
+ fontStyle: "italic"
45
+ });
46
+
47
+ export { ConditionsCell };
48
+ //# sourceMappingURL=ConditionsCell.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConditionsCell.esm.js","sources":["../../src/components/ConditionsCell.tsx"],"sourcesContent":["import Box from '@massdriver/ui/Box';\nimport Typography from '@massdriver/ui/Typography';\nimport stylin from '@massdriver/ui/stylin';\nimport { denormalizeConditionsFromWire } from '../utils/conditions';\n\n// Ported from apps/web/shared/components/ConditionsCell.js\n\n/** Renders a grant's recipient conditions as `key = value` / `key ∈ [..]` rows. */\nexport const ConditionsCell = ({\n conditions,\n wildcardLabel = 'Applies to everything',\n}: {\n conditions: unknown;\n wildcardLabel?: string;\n}) => {\n const parsed = denormalizeConditionsFromWire(conditions);\n const entries = Object.entries(parsed);\n\n return entries.length === 0 ? (\n <Wildcard variant=\"body2\" color=\"text.secondary\">\n {wildcardLabel}\n </Wildcard>\n ) : (\n <Wrapper>\n {entries.map(([key, value]) => (\n <ConditionPiece key={key}>\n <Key>{key}</Key>\n <Equals>{Array.isArray(value) ? '∈' : '='}</Equals>\n <Value>\n {Array.isArray(value) ? `[${value.join(', ')}]` : String(value)}\n </Value>\n </ConditionPiece>\n ))}\n </Wrapper>\n );\n};\n\nconst Wrapper = stylin(Box)(({ theme }: { theme: any }) => ({\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(0.25),\n}));\n\nconst ConditionPiece = stylin(Box)(({ theme }: { theme: any }) => ({\n display: 'inline-flex',\n alignItems: 'center',\n gap: theme.spacing(0.5),\n fontSize: theme.typography.body2.fontSize,\n}));\n\nconst Key = stylin(Typography)(({ theme }: { theme: any }) => ({\n fontFamily: theme.typography.fontFamilyMono ?? 'monospace',\n fontSize: theme.typography.body2.fontSize,\n color: theme.palette.text.primary,\n}));\n\nconst Equals = stylin(Typography)(({ theme }: { theme: any }) => ({\n color: theme.palette.text.secondary,\n fontSize: theme.typography.body2.fontSize,\n}));\n\nconst Value = stylin(Typography)(({ theme }: { theme: any }) => ({\n color: theme.palette.text.primary,\n fontSize: theme.typography.body2.fontSize,\n}));\n\nconst Wildcard = stylin(Typography)({\n fontStyle: 'italic',\n});\n"],"names":[],"mappings":";;;;;;AAQO,MAAM,iBAAiB,CAAC;AAAA,EAC7B,UAAA;AAAA,EACA,aAAA,GAAgB;AAClB,CAAA,KAGM;AACJ,EAAA,MAAM,MAAA,GAAS,8BAA8B,UAAU,CAAA;AACvD,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA;AAErC,EAAA,OAAO,OAAA,CAAQ,WAAW,CAAA,mBACxB,GAAA,CAAC,YAAS,OAAA,EAAQ,OAAA,EAAQ,OAAM,gBAAA,EAC7B,QAAA,EAAA,aAAA,EACH,oBAEA,GAAA,CAAC,OAAA,EAAA,EACE,kBAAQ,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,qBACvB,IAAA,CAAC,cAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,OAAK,QAAA,EAAA,GAAA,EAAI,CAAA;AAAA,wBACT,MAAA,EAAA,EAAQ,QAAA,EAAA,KAAA,CAAM,QAAQ,KAAK,CAAA,GAAI,WAAM,GAAA,EAAI,CAAA;AAAA,oBAC1C,GAAA,CAAC,KAAA,EAAA,EACE,QAAA,EAAA,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAI,CAAA,CAAA,EAAI,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA,GAAM,MAAA,CAAO,KAAK,CAAA,EAChE;AAAA,GAAA,EAAA,EALmB,GAMrB,CACD,CAAA,EACH,CAAA;AAEJ;AAEA,MAAM,UAAU,MAAA,CAAO,GAAG,EAAE,CAAC,EAAE,OAAM,MAAuB;AAAA,EAC1D,OAAA,EAAS,MAAA;AAAA,EACT,aAAA,EAAe,QAAA;AAAA,EACf,GAAA,EAAK,KAAA,CAAM,OAAA,CAAQ,IAAI;AACzB,CAAA,CAAE,CAAA;AAEF,MAAM,iBAAiB,MAAA,CAAO,GAAG,EAAE,CAAC,EAAE,OAAM,MAAuB;AAAA,EACjE,OAAA,EAAS,aAAA;AAAA,EACT,UAAA,EAAY,QAAA;AAAA,EACZ,GAAA,EAAK,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA;AAAA,EACtB,QAAA,EAAU,KAAA,CAAM,UAAA,CAAW,KAAA,CAAM;AACnC,CAAA,CAAE,CAAA;AAEF,MAAM,MAAM,MAAA,CAAO,UAAU,EAAE,CAAC,EAAE,OAAM,MAAuB;AAAA,EAC7D,UAAA,EAAY,KAAA,CAAM,UAAA,CAAW,cAAA,IAAkB,WAAA;AAAA,EAC/C,QAAA,EAAU,KAAA,CAAM,UAAA,CAAW,KAAA,CAAM,QAAA;AAAA,EACjC,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK;AAC5B,CAAA,CAAE,CAAA;AAEF,MAAM,SAAS,MAAA,CAAO,UAAU,EAAE,CAAC,EAAE,OAAM,MAAuB;AAAA,EAChE,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,SAAA;AAAA,EAC1B,QAAA,EAAU,KAAA,CAAM,UAAA,CAAW,KAAA,CAAM;AACnC,CAAA,CAAE,CAAA;AAEF,MAAM,QAAQ,MAAA,CAAO,UAAU,EAAE,CAAC,EAAE,OAAM,MAAuB;AAAA,EAC/D,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,OAAA;AAAA,EAC1B,QAAA,EAAU,KAAA,CAAM,UAAA,CAAW,KAAA,CAAM;AACnC,CAAA,CAAE,CAAA;AAEF,MAAM,QAAA,GAAW,MAAA,CAAO,UAAU,CAAA,CAAE;AAAA,EAClC,SAAA,EAAW;AACb,CAAC,CAAA;;;;"}
@@ -0,0 +1,30 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import Button from '@massdriver/ui/Button';
3
+ import Tooltip from '@massdriver/ui/Tooltip';
4
+ import stylin from '@massdriver/ui/stylin';
5
+
6
+ const DisabledAction = ({
7
+ label,
8
+ tooltip,
9
+ variant = "outlined",
10
+ size,
11
+ color,
12
+ startIcon,
13
+ children
14
+ }) => /* @__PURE__ */ jsx(Tooltip, { title: tooltip, placement: "top", children: /* @__PURE__ */ jsx(Wrap, { children: /* @__PURE__ */ jsx(
15
+ Button,
16
+ {
17
+ variant,
18
+ size,
19
+ color,
20
+ startIcon,
21
+ disabled: true,
22
+ children: label ?? children
23
+ }
24
+ ) }) });
25
+ const Wrap = stylin("span")({
26
+ display: "inline-flex"
27
+ });
28
+
29
+ export { DisabledAction, DisabledAction as default };
30
+ //# sourceMappingURL=DisabledAction.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DisabledAction.esm.js","sources":["../../src/components/DisabledAction.tsx"],"sourcesContent":["import { ReactNode } from 'react';\nimport Button from '@massdriver/ui/Button';\nimport Tooltip from '@massdriver/ui/Tooltip';\nimport stylin from '@massdriver/ui/stylin';\n\n/**\n * A greyed-out (disabled) action control with an explanatory tooltip, for\n * mutating actions the app offers that this read-only mini-app cannot perform.\n * Mirrors the disabled \"Propose\" button pattern — the affordance stays visible\n * so the UI matches the web app, but it's non-interactive and the tooltip points\n * the user to Massdriver. The span wrapper lets the tooltip fire on a disabled\n * button (MUI swallows events on disabled elements otherwise).\n */\nexport const DisabledAction = ({\n label,\n tooltip,\n variant = 'outlined',\n size,\n color,\n startIcon,\n children,\n}: {\n label?: ReactNode;\n tooltip: string;\n variant?: 'text' | 'outlined' | 'contained';\n size?: 'small' | 'medium' | 'large';\n color?: string;\n startIcon?: ReactNode;\n children?: ReactNode;\n}) => (\n <Tooltip title={tooltip} placement=\"top\">\n <Wrap>\n <Button\n variant={variant}\n size={size}\n color={color}\n startIcon={startIcon}\n disabled\n >\n {label ?? children}\n </Button>\n </Wrap>\n </Tooltip>\n);\n\nexport default DisabledAction;\n\nconst Wrap = stylin('span')({\n display: 'inline-flex',\n});\n"],"names":[],"mappings":";;;;;AAaO,MAAM,iBAAiB,CAAC;AAAA,EAC7B,KAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA,GAAU,UAAA;AAAA,EACV,IAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,yBASG,OAAA,EAAA,EAAQ,KAAA,EAAO,SAAS,SAAA,EAAU,KAAA,EACjC,8BAAC,IAAA,EAAA,EACC,QAAA,kBAAA,GAAA;AAAA,EAAC,MAAA;AAAA,EAAA;AAAA,IACC,OAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA,EAAQ,IAAA;AAAA,IAEP,QAAA,EAAA,KAAA,IAAS;AAAA;AACZ,CAAA,EACF,CAAA,EACF;AAKF,MAAM,IAAA,GAAO,MAAA,CAAO,MAAM,CAAA,CAAE;AAAA,EAC1B,OAAA,EAAS;AACX,CAAC,CAAA;;;;"}
@@ -0,0 +1,80 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { EmptyState, Progress, ResponseErrorPanel, Table, Link } from '@backstage/core-components';
3
+ import { useApi } from '@backstage/frontend-plugin-api';
4
+ import { useEntity } from '@backstage/plugin-catalog-react';
5
+ import { instanceUrl, environmentUrl, projectUrl } from '@massdriver/backstage-plugin-common';
6
+ import { massdriverApiRef } from '../../api.esm.js';
7
+ import { getMassdriverScope } from '../../entity.esm.js';
8
+ import { useMassdriverInstances } from '../../useInstances.esm.js';
9
+ import { InstanceStatusIndicator } from '../InstanceStatusIndicator.esm.js';
10
+
11
+ const columns = (appUrl, orgId) => [
12
+ {
13
+ title: "Instance",
14
+ field: "id",
15
+ render: (row) => /* @__PURE__ */ jsx(Link, { to: instanceUrl(appUrl, orgId, row.id), children: row.id })
16
+ },
17
+ {
18
+ title: "Status",
19
+ field: "status",
20
+ render: (row) => /* @__PURE__ */ jsx(InstanceStatusIndicator, { status: row.status })
21
+ },
22
+ { title: "Resolved version", field: "resolvedVersion" },
23
+ { title: "Deployed version", field: "deployedVersion" }
24
+ ];
25
+ const scopeDeepLink = (scope, appUrl, orgId) => {
26
+ switch (scope.kind) {
27
+ case "project":
28
+ return projectUrl(appUrl, orgId, scope.projectId);
29
+ case "environment":
30
+ return environmentUrl(appUrl, orgId, scope.environmentId);
31
+ case "instance":
32
+ return instanceUrl(appUrl, orgId, scope.instanceId);
33
+ default:
34
+ return appUrl;
35
+ }
36
+ };
37
+ const EntityMassdriverContent = () => {
38
+ const { entity } = useEntity();
39
+ const api = useApi(massdriverApiRef);
40
+ const scope = getMassdriverScope(entity);
41
+ const orgId = scope?.orgId || api.organizationId;
42
+ const { value: instances, loading, error } = useMassdriverInstances(scope);
43
+ if (!scope) {
44
+ return /* @__PURE__ */ jsx(
45
+ EmptyState,
46
+ {
47
+ missing: "info",
48
+ title: "Not a Massdriver entity",
49
+ description: "This entity has no Massdriver annotations."
50
+ }
51
+ );
52
+ }
53
+ if (loading) {
54
+ return /* @__PURE__ */ jsx(Progress, {});
55
+ }
56
+ if (error) {
57
+ return /* @__PURE__ */ jsx(ResponseErrorPanel, { error });
58
+ }
59
+ return /* @__PURE__ */ jsx(
60
+ Table,
61
+ {
62
+ title: "Massdriver instances",
63
+ options: { search: true, paging: (instances?.length ?? 0) > 20 },
64
+ columns: columns(api.appUrl, orgId),
65
+ data: instances ?? [],
66
+ emptyContent: /* @__PURE__ */ jsx(
67
+ EmptyState,
68
+ {
69
+ missing: "data",
70
+ title: "No instances",
71
+ description: "No Massdriver instances were found for this entity.",
72
+ action: /* @__PURE__ */ jsx(Link, { to: scopeDeepLink(scope, api.appUrl, orgId), children: "Open in Massdriver" })
73
+ }
74
+ )
75
+ }
76
+ );
77
+ };
78
+
79
+ export { EntityMassdriverContent };
80
+ //# sourceMappingURL=EntityMassdriverContent.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EntityMassdriverContent.esm.js","sources":["../../../src/components/EntityMassdriverContent/EntityMassdriverContent.tsx"],"sourcesContent":["import {\n EmptyState,\n Link,\n Progress,\n ResponseErrorPanel,\n Table,\n TableColumn,\n} from '@backstage/core-components';\nimport { useApi } from '@backstage/frontend-plugin-api';\nimport { useEntity } from '@backstage/plugin-catalog-react';\nimport {\n environmentUrl,\n instanceUrl,\n projectUrl,\n} from '@massdriver/backstage-plugin-common';\nimport { massdriverApiRef } from '../../api';\nimport { getMassdriverScope, MassdriverScope } from '../../entity';\nimport { InstanceRow } from '../../queries';\nimport { useMassdriverInstances } from '../../useInstances';\nimport { InstanceStatusIndicator } from '../InstanceStatusIndicator';\n\nconst columns = (appUrl: string, orgId: string): TableColumn<InstanceRow>[] => [\n {\n title: 'Instance',\n field: 'id',\n render: row => (\n <Link to={instanceUrl(appUrl, orgId, row.id)}>{row.id}</Link>\n ),\n },\n {\n title: 'Status',\n field: 'status',\n render: row => <InstanceStatusIndicator status={row.status} />,\n },\n { title: 'Resolved version', field: 'resolvedVersion' },\n { title: 'Deployed version', field: 'deployedVersion' },\n];\n\nconst scopeDeepLink = (\n scope: MassdriverScope,\n appUrl: string,\n orgId: string,\n): string => {\n switch (scope.kind) {\n case 'project':\n return projectUrl(appUrl, orgId, scope.projectId);\n case 'environment':\n return environmentUrl(appUrl, orgId, scope.environmentId);\n case 'instance':\n return instanceUrl(appUrl, orgId, scope.instanceId);\n default:\n return appUrl;\n }\n};\n\n/**\n * Entity content tab that lists the Massdriver instances for the entity's\n * scope (project or environment) or the details of a single instance.\n *\n * @public\n */\nexport const EntityMassdriverContent = () => {\n const { entity } = useEntity();\n const api = useApi(massdriverApiRef);\n const scope = getMassdriverScope(entity);\n const orgId = scope?.orgId || api.organizationId;\n const { value: instances, loading, error } = useMassdriverInstances(scope);\n\n if (!scope) {\n return (\n <EmptyState\n missing=\"info\"\n title=\"Not a Massdriver entity\"\n description=\"This entity has no Massdriver annotations.\"\n />\n );\n }\n\n if (loading) {\n return <Progress />;\n }\n\n if (error) {\n return <ResponseErrorPanel error={error} />;\n }\n\n return (\n <Table<InstanceRow>\n title=\"Massdriver instances\"\n options={{ search: true, paging: (instances?.length ?? 0) > 20 }}\n columns={columns(api.appUrl, orgId)}\n data={instances ?? []}\n emptyContent={\n <EmptyState\n missing=\"data\"\n title=\"No instances\"\n description=\"No Massdriver instances were found for this entity.\"\n action={\n <Link to={scopeDeepLink(scope, api.appUrl, orgId)}>\n Open in Massdriver\n </Link>\n }\n />\n }\n />\n );\n};\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { EntityMassdriverContent } from './EntityMassdriverContent.esm.js';
2
+
3
+
4
+
5
+ export { EntityMassdriverContent };
6
+ //# sourceMappingURL=index.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}