@massdriver/backstage-plugin 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (346) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +196 -0
  3. package/dist/MassdriverRouter.esm.js +78 -0
  4. package/dist/MassdriverRouter.esm.js.map +1 -0
  5. package/dist/api.esm.js +119 -0
  6. package/dist/api.esm.js.map +1 -0
  7. package/dist/assets/massdriver-logo-dark.svg +55 -0
  8. package/dist/assets/massdriver-logo-light.svg +50 -0
  9. package/dist/components/AttributesColumn.esm.js +95 -0
  10. package/dist/components/AttributesColumn.esm.js.map +1 -0
  11. package/dist/components/AttributesSummaryCell.esm.js +103 -0
  12. package/dist/components/AttributesSummaryCell.esm.js.map +1 -0
  13. package/dist/components/AuthedIcon.esm.js +26 -0
  14. package/dist/components/AuthedIcon.esm.js.map +1 -0
  15. package/dist/components/ConditionsCell.esm.js +48 -0
  16. package/dist/components/ConditionsCell.esm.js.map +1 -0
  17. package/dist/components/DisabledAction.esm.js +30 -0
  18. package/dist/components/DisabledAction.esm.js.map +1 -0
  19. package/dist/components/EntityMassdriverContent/EntityMassdriverContent.esm.js +80 -0
  20. package/dist/components/EntityMassdriverContent/EntityMassdriverContent.esm.js.map +1 -0
  21. package/dist/components/EntityMassdriverContent/index.esm.js +6 -0
  22. package/dist/components/EntityMassdriverContent/index.esm.js.map +1 -0
  23. package/dist/components/EntityMassdriverOverviewCard/EntityMassdriverOverviewCard.esm.js +75 -0
  24. package/dist/components/EntityMassdriverOverviewCard/EntityMassdriverOverviewCard.esm.js.map +1 -0
  25. package/dist/components/EntityMassdriverOverviewCard/index.esm.js +6 -0
  26. package/dist/components/EntityMassdriverOverviewCard/index.esm.js.map +1 -0
  27. package/dist/components/ForkPill.esm.js +84 -0
  28. package/dist/components/ForkPill.esm.js.map +1 -0
  29. package/dist/components/InstanceStatusIndicator.esm.js +21 -0
  30. package/dist/components/InstanceStatusIndicator.esm.js.map +1 -0
  31. package/dist/components/InstanceStatusPill.esm.js +67 -0
  32. package/dist/components/InstanceStatusPill.esm.js.map +1 -0
  33. package/dist/components/MassdriverIcon.esm.js +13 -0
  34. package/dist/components/MassdriverIcon.esm.js.map +1 -0
  35. package/dist/components/MassdriverSidebarItem.esm.js +45 -0
  36. package/dist/components/MassdriverSidebarItem.esm.js.map +1 -0
  37. package/dist/components/NotFound.esm.js +44 -0
  38. package/dist/components/NotFound.esm.js.map +1 -0
  39. package/dist/components/OpenInMassdriverButton.esm.js +24 -0
  40. package/dist/components/OpenInMassdriverButton.esm.js.map +1 -0
  41. package/dist/components/PageLayout.esm.js +88 -0
  42. package/dist/components/PageLayout.esm.js.map +1 -0
  43. package/dist/components/RouterLinkAdapter.esm.js +12 -0
  44. package/dist/components/RouterLinkAdapter.esm.js.map +1 -0
  45. package/dist/components/VersionBadge.esm.js +57 -0
  46. package/dist/components/VersionBadge.esm.js.map +1 -0
  47. package/dist/components/grantColumns.esm.js +56 -0
  48. package/dist/components/grantColumns.esm.js.map +1 -0
  49. package/dist/components/icons/BundleIcon.esm.js +7 -0
  50. package/dist/components/icons/BundleIcon.esm.js.map +1 -0
  51. package/dist/components/icons/FolderOutlinedIcon.esm.js +7 -0
  52. package/dist/components/icons/FolderOutlinedIcon.esm.js.map +1 -0
  53. package/dist/components/icons/TokenIcon.esm.js +7 -0
  54. package/dist/components/icons/TokenIcon.esm.js.map +1 -0
  55. package/dist/entity.esm.js +23 -0
  56. package/dist/entity.esm.js.map +1 -0
  57. package/dist/features/environment/CompareDeploymentsDialog/CompareDeploymentsDialog.esm.js +115 -0
  58. package/dist/features/environment/CompareDeploymentsDialog/CompareDeploymentsDialog.esm.js.map +1 -0
  59. package/dist/features/environment/CompareDeploymentsDialog/ResultsStep.esm.js +165 -0
  60. package/dist/features/environment/CompareDeploymentsDialog/ResultsStep.esm.js.map +1 -0
  61. package/dist/features/environment/CompareDeploymentsDialog/SelectStep.esm.js +216 -0
  62. package/dist/features/environment/CompareDeploymentsDialog/SelectStep.esm.js.map +1 -0
  63. package/dist/features/environment/CompareDeploymentsDialog/compareColumns.esm.js +86 -0
  64. package/dist/features/environment/CompareDeploymentsDialog/compareColumns.esm.js.map +1 -0
  65. package/dist/features/environment/CompareDeploymentsDialog/flattenDeploymentComparison.esm.js +57 -0
  66. package/dist/features/environment/CompareDeploymentsDialog/flattenDeploymentComparison.esm.js.map +1 -0
  67. package/dist/features/environment/CompareDeploymentsDialog/queries.esm.js +53 -0
  68. package/dist/features/environment/CompareDeploymentsDialog/queries.esm.js.map +1 -0
  69. package/dist/features/environment/CompareEnvironmentsDialog/CompareEnvironmentsDialog.esm.js +94 -0
  70. package/dist/features/environment/CompareEnvironmentsDialog/CompareEnvironmentsDialog.esm.js.map +1 -0
  71. package/dist/features/environment/CompareEnvironmentsDialog/ComparisonValueCell.esm.js +67 -0
  72. package/dist/features/environment/CompareEnvironmentsDialog/ComparisonValueCell.esm.js.map +1 -0
  73. package/dist/features/environment/CompareEnvironmentsDialog/ResultsStep.esm.js +202 -0
  74. package/dist/features/environment/CompareEnvironmentsDialog/ResultsStep.esm.js.map +1 -0
  75. package/dist/features/environment/CompareEnvironmentsDialog/SelectStep.esm.js +183 -0
  76. package/dist/features/environment/CompareEnvironmentsDialog/SelectStep.esm.js.map +1 -0
  77. package/dist/features/environment/CompareEnvironmentsDialog/compareColumns.esm.js +73 -0
  78. package/dist/features/environment/CompareEnvironmentsDialog/compareColumns.esm.js.map +1 -0
  79. package/dist/features/environment/CompareEnvironmentsDialog/flattenComparison.esm.js +70 -0
  80. package/dist/features/environment/CompareEnvironmentsDialog/flattenComparison.esm.js.map +1 -0
  81. package/dist/features/environment/CompareEnvironmentsDialog/queries.esm.js +32 -0
  82. package/dist/features/environment/CompareEnvironmentsDialog/queries.esm.js.map +1 -0
  83. package/dist/features/environment/EnvironmentGraphPage.esm.js +131 -0
  84. package/dist/features/environment/EnvironmentGraphPage.esm.js.map +1 -0
  85. package/dist/features/environment/GraphHeader/EnvironmentDefaults.esm.js +252 -0
  86. package/dist/features/environment/GraphHeader/EnvironmentDefaults.esm.js.map +1 -0
  87. package/dist/features/environment/GraphHeader/GraphHeader.esm.js +247 -0
  88. package/dist/features/environment/GraphHeader/GraphHeader.esm.js.map +1 -0
  89. package/dist/features/environment/GraphHeader/HeaderActions.esm.js +127 -0
  90. package/dist/features/environment/GraphHeader/HeaderActions.esm.js.map +1 -0
  91. package/dist/features/environment/GraphHeader/Switcher.esm.js +75 -0
  92. package/dist/features/environment/GraphHeader/Switcher.esm.js.map +1 -0
  93. package/dist/features/environment/GraphHeader/queries.esm.js +60 -0
  94. package/dist/features/environment/GraphHeader/queries.esm.js.map +1 -0
  95. package/dist/features/environment/InstanceDrawer/AlarmCard.esm.js +151 -0
  96. package/dist/features/environment/InstanceDrawer/AlarmCard.esm.js.map +1 -0
  97. package/dist/features/environment/InstanceDrawer/InstanceDrawer.esm.js +165 -0
  98. package/dist/features/environment/InstanceDrawer/InstanceDrawer.esm.js.map +1 -0
  99. package/dist/features/environment/InstanceDrawer/InstanceDrawerHeader.esm.js +241 -0
  100. package/dist/features/environment/InstanceDrawer/InstanceDrawerHeader.esm.js.map +1 -0
  101. package/dist/features/environment/InstanceDrawer/InstanceTabs.esm.js +119 -0
  102. package/dist/features/environment/InstanceDrawer/InstanceTabs.esm.js.map +1 -0
  103. package/dist/features/environment/InstanceDrawer/TabState.esm.js +30 -0
  104. package/dist/features/environment/InstanceDrawer/TabState.esm.js.map +1 -0
  105. package/dist/features/environment/InstanceDrawer/formsDataSource.esm.js +25 -0
  106. package/dist/features/environment/InstanceDrawer/formsDataSource.esm.js.map +1 -0
  107. package/dist/features/environment/InstanceDrawer/helpers.esm.js +282 -0
  108. package/dist/features/environment/InstanceDrawer/helpers.esm.js.map +1 -0
  109. package/dist/features/environment/InstanceDrawer/queries.esm.js +281 -0
  110. package/dist/features/environment/InstanceDrawer/queries.esm.js.map +1 -0
  111. package/dist/features/environment/InstanceDrawer/tabs/ConfigTab.esm.js +170 -0
  112. package/dist/features/environment/InstanceDrawer/tabs/ConfigTab.esm.js.map +1 -0
  113. package/dist/features/environment/InstanceDrawer/tabs/DependenciesTab.esm.js +413 -0
  114. package/dist/features/environment/InstanceDrawer/tabs/DependenciesTab.esm.js.map +1 -0
  115. package/dist/features/environment/InstanceDrawer/tabs/DeploymentLogsPanel.esm.js +191 -0
  116. package/dist/features/environment/InstanceDrawer/tabs/DeploymentLogsPanel.esm.js.map +1 -0
  117. package/dist/features/environment/InstanceDrawer/tabs/DeploymentReadOnlyActions.esm.js +63 -0
  118. package/dist/features/environment/InstanceDrawer/tabs/DeploymentReadOnlyActions.esm.js.map +1 -0
  119. package/dist/features/environment/InstanceDrawer/tabs/GuideTab.esm.js +48 -0
  120. package/dist/features/environment/InstanceDrawer/tabs/GuideTab.esm.js.map +1 -0
  121. package/dist/features/environment/InstanceDrawer/tabs/HistoryTab.esm.js +446 -0
  122. package/dist/features/environment/InstanceDrawer/tabs/HistoryTab.esm.js.map +1 -0
  123. package/dist/features/environment/InstanceDrawer/tabs/MonitorTab.esm.js +146 -0
  124. package/dist/features/environment/InstanceDrawer/tabs/MonitorTab.esm.js.map +1 -0
  125. package/dist/features/environment/InstanceDrawer/tabs/OverviewTab.esm.js +572 -0
  126. package/dist/features/environment/InstanceDrawer/tabs/OverviewTab.esm.js.map +1 -0
  127. package/dist/features/environment/InstanceDrawer/tabs/ResourcesTab.esm.js +471 -0
  128. package/dist/features/environment/InstanceDrawer/tabs/ResourcesTab.esm.js.map +1 -0
  129. package/dist/features/environment/InstanceDrawer/tabs/SecretsTab.esm.js +109 -0
  130. package/dist/features/environment/InstanceDrawer/tabs/SecretsTab.esm.js.map +1 -0
  131. package/dist/features/environment/InstanceDrawer/tabs/ViewDeploymentDetails.esm.js +384 -0
  132. package/dist/features/environment/InstanceDrawer/tabs/ViewDeploymentDetails.esm.js.map +1 -0
  133. package/dist/features/environment/InstanceDrawer/tabs/flattenParams.esm.js +23 -0
  134. package/dist/features/environment/InstanceDrawer/tabs/flattenParams.esm.js.map +1 -0
  135. package/dist/features/environment/InstanceDrawer/useInstanceApiQuery.esm.js +6 -0
  136. package/dist/features/environment/InstanceDrawer/useInstanceApiQuery.esm.js.map +1 -0
  137. package/dist/features/environment/InstanceDrawer/useOverflowMeasure.esm.js +55 -0
  138. package/dist/features/environment/InstanceDrawer/useOverflowMeasure.esm.js.map +1 -0
  139. package/dist/features/environment/InstanceDrawer/useResizableWidth.esm.js +44 -0
  140. package/dist/features/environment/InstanceDrawer/useResizableWidth.esm.js.map +1 -0
  141. package/dist/features/environment/components/InstanceStatusPill.esm.js +54 -0
  142. package/dist/features/environment/components/InstanceStatusPill.esm.js.map +1 -0
  143. package/dist/features/environment/graph/Diagram.esm.js +143 -0
  144. package/dist/features/environment/graph/Diagram.esm.js.map +1 -0
  145. package/dist/features/environment/graph/DiagramNode.constants.esm.js +5 -0
  146. package/dist/features/environment/graph/DiagramNode.constants.esm.js.map +1 -0
  147. package/dist/features/environment/graph/DiagramNode.esm.js +221 -0
  148. package/dist/features/environment/graph/DiagramNode.esm.js.map +1 -0
  149. package/dist/features/environment/graph/NodeMeta.esm.js +182 -0
  150. package/dist/features/environment/graph/NodeMeta.esm.js.map +1 -0
  151. package/dist/features/environment/graph/NodeVersionBadges.esm.js +150 -0
  152. package/dist/features/environment/graph/NodeVersionBadges.esm.js.map +1 -0
  153. package/dist/features/environment/graph/diagramFactory.esm.js +151 -0
  154. package/dist/features/environment/graph/diagramFactory.esm.js.map +1 -0
  155. package/dist/features/environment/graph/handles/ExpandableHandleWrapper.esm.js +174 -0
  156. package/dist/features/environment/graph/handles/ExpandableHandleWrapper.esm.js.map +1 -0
  157. package/dist/features/environment/graph/handles/NodeHandle.esm.js +45 -0
  158. package/dist/features/environment/graph/handles/NodeHandle.esm.js.map +1 -0
  159. package/dist/features/environment/graph/handles/NodeHandleTooltip.esm.js +134 -0
  160. package/dist/features/environment/graph/handles/NodeHandleTooltip.esm.js.map +1 -0
  161. package/dist/features/environment/graph/handles/handleTypes.esm.js +170 -0
  162. package/dist/features/environment/graph/handles/handleTypes.esm.js.map +1 -0
  163. package/dist/features/environment/graph/handles/useAnimationFrameSync.esm.js +19 -0
  164. package/dist/features/environment/graph/handles/useAnimationFrameSync.esm.js.map +1 -0
  165. package/dist/features/environment/graph/handles/useRadialPositions.esm.js +37 -0
  166. package/dist/features/environment/graph/handles/useRadialPositions.esm.js.map +1 -0
  167. package/dist/features/environment/graph/handles/useTransitionLifecycle.esm.js +19 -0
  168. package/dist/features/environment/graph/handles/useTransitionLifecycle.esm.js.map +1 -0
  169. package/dist/features/environment/graph/hasUndeployedPlan.esm.js +43 -0
  170. package/dist/features/environment/graph/hasUndeployedPlan.esm.js.map +1 -0
  171. package/dist/features/environment/graph/queries.esm.js +103 -0
  172. package/dist/features/environment/graph/queries.esm.js.map +1 -0
  173. package/dist/features/environment/graph/useDiagramSnapshot.esm.js +43 -0
  174. package/dist/features/environment/graph/useDiagramSnapshot.esm.js.map +1 -0
  175. package/dist/features/environment/realtime/RealtimeProvider.esm.js +43 -0
  176. package/dist/features/environment/realtime/RealtimeProvider.esm.js.map +1 -0
  177. package/dist/features/environment/realtime/queries.esm.js +76 -0
  178. package/dist/features/environment/realtime/queries.esm.js.map +1 -0
  179. package/dist/features/environment/realtime/useLiveRelayQuery.esm.js +36 -0
  180. package/dist/features/environment/realtime/useLiveRelayQuery.esm.js.map +1 -0
  181. package/dist/features/project/ProjectDetailsPage.esm.js +101 -0
  182. package/dist/features/project/ProjectDetailsPage.esm.js.map +1 -0
  183. package/dist/features/project/tabs/ComponentsTab.esm.js +149 -0
  184. package/dist/features/project/tabs/ComponentsTab.esm.js.map +1 -0
  185. package/dist/features/project/tabs/EnvStatus.esm.js +149 -0
  186. package/dist/features/project/tabs/EnvStatus.esm.js.map +1 -0
  187. package/dist/features/project/tabs/EnvironmentsTab.esm.js +199 -0
  188. package/dist/features/project/tabs/EnvironmentsTab.esm.js.map +1 -0
  189. package/dist/features/project/tabs/OverviewTab.esm.js +420 -0
  190. package/dist/features/project/tabs/OverviewTab.esm.js.map +1 -0
  191. package/dist/features/projects/ProjectsListPage.esm.js +50 -0
  192. package/dist/features/projects/ProjectsListPage.esm.js.map +1 -0
  193. package/dist/features/projects/ProjectsListPageLazy.esm.js +12 -0
  194. package/dist/features/projects/ProjectsListPageLazy.esm.js.map +1 -0
  195. package/dist/features/projects/projectColumns.esm.js +38 -0
  196. package/dist/features/projects/projectColumns.esm.js.map +1 -0
  197. package/dist/features/projects/useProjects.esm.js +48 -0
  198. package/dist/features/projects/useProjects.esm.js.map +1 -0
  199. package/dist/features/repo/DeploymentLogsDrawer.esm.js +213 -0
  200. package/dist/features/repo/DeploymentLogsDrawer.esm.js.map +1 -0
  201. package/dist/features/repo/DeploymentLogsDrawer.loading.esm.js +43 -0
  202. package/dist/features/repo/DeploymentLogsDrawer.loading.esm.js.map +1 -0
  203. package/dist/features/repo/FileTree.esm.js +179 -0
  204. package/dist/features/repo/FileTree.esm.js.map +1 -0
  205. package/dist/features/repo/FileViewer.esm.js +115 -0
  206. package/dist/features/repo/FileViewer.esm.js.map +1 -0
  207. package/dist/features/repo/FileViewer.helpers.esm.js +54 -0
  208. package/dist/features/repo/FileViewer.helpers.esm.js.map +1 -0
  209. package/dist/features/repo/RepoDetailsPage.esm.js +127 -0
  210. package/dist/features/repo/RepoDetailsPage.esm.js.map +1 -0
  211. package/dist/features/repo/RepoEmptyState.esm.js +58 -0
  212. package/dist/features/repo/RepoEmptyState.esm.js.map +1 -0
  213. package/dist/features/repo/RepoNoVersionsState.esm.js +29 -0
  214. package/dist/features/repo/RepoNoVersionsState.esm.js.map +1 -0
  215. package/dist/features/repo/RepoTabHeader.esm.js +30 -0
  216. package/dist/features/repo/RepoTabHeader.esm.js.map +1 -0
  217. package/dist/features/repo/RepoTabLayout.esm.js +18 -0
  218. package/dist/features/repo/RepoTabLayout.esm.js.map +1 -0
  219. package/dist/features/repo/RepoVersionSelect.esm.js +176 -0
  220. package/dist/features/repo/RepoVersionSelect.esm.js.map +1 -0
  221. package/dist/features/repo/ViewDeploymentDetailsDialog.esm.js +427 -0
  222. package/dist/features/repo/ViewDeploymentDetailsDialog.esm.js.map +1 -0
  223. package/dist/features/repo/deploymentHelpers.esm.js +74 -0
  224. package/dist/features/repo/deploymentHelpers.esm.js.map +1 -0
  225. package/dist/features/repo/fileTreeHelpers.esm.js +45 -0
  226. package/dist/features/repo/fileTreeHelpers.esm.js.map +1 -0
  227. package/dist/features/repo/flattenParams.esm.js +23 -0
  228. package/dist/features/repo/flattenParams.esm.js.map +1 -0
  229. package/dist/features/repo/queries.esm.js +239 -0
  230. package/dist/features/repo/queries.esm.js.map +1 -0
  231. package/dist/features/repo/repoFilter.esm.js +9 -0
  232. package/dist/features/repo/repoFilter.esm.js.map +1 -0
  233. package/dist/features/repo/repoTabs.esm.js +22 -0
  234. package/dist/features/repo/repoTabs.esm.js.map +1 -0
  235. package/dist/features/repo/resolveVersion.esm.js +22 -0
  236. package/dist/features/repo/resolveVersion.esm.js.map +1 -0
  237. package/dist/features/repo/tabs/DeploymentRow.esm.js +201 -0
  238. package/dist/features/repo/tabs/DeploymentRow.esm.js.map +1 -0
  239. package/dist/features/repo/tabs/DeploymentsTab.esm.js +188 -0
  240. package/dist/features/repo/tabs/DeploymentsTab.esm.js.map +1 -0
  241. package/dist/features/repo/tabs/DeploymentsTab.helpers.esm.js +46 -0
  242. package/dist/features/repo/tabs/DeploymentsTab.helpers.esm.js.map +1 -0
  243. package/dist/features/repo/tabs/DeploymentsTab.loading.esm.js +37 -0
  244. package/dist/features/repo/tabs/DeploymentsTab.loading.esm.js.map +1 -0
  245. package/dist/features/repo/tabs/FilesTab.esm.js +142 -0
  246. package/dist/features/repo/tabs/FilesTab.esm.js.map +1 -0
  247. package/dist/features/repo/tabs/InstanceRow.esm.js +121 -0
  248. package/dist/features/repo/tabs/InstanceRow.esm.js.map +1 -0
  249. package/dist/features/repo/tabs/InstancesTab.esm.js +147 -0
  250. package/dist/features/repo/tabs/InstancesTab.esm.js.map +1 -0
  251. package/dist/features/repo/tabs/InstancesTab.helpers.esm.js +44 -0
  252. package/dist/features/repo/tabs/InstancesTab.helpers.esm.js.map +1 -0
  253. package/dist/features/repo/tabs/InstancesTab.loading.esm.js +33 -0
  254. package/dist/features/repo/tabs/InstancesTab.loading.esm.js.map +1 -0
  255. package/dist/features/repo/tabs/OverviewTab.esm.js +77 -0
  256. package/dist/features/repo/tabs/OverviewTab.esm.js.map +1 -0
  257. package/dist/features/repo/tabs/PermissionsTab.esm.js +56 -0
  258. package/dist/features/repo/tabs/PermissionsTab.esm.js.map +1 -0
  259. package/dist/features/repo/tabs/VersionsTab.esm.js +152 -0
  260. package/dist/features/repo/tabs/VersionsTab.esm.js.map +1 -0
  261. package/dist/features/repo/useInfiniteRelayList.esm.js +92 -0
  262. package/dist/features/repo/useInfiniteRelayList.esm.js.map +1 -0
  263. package/dist/features/repo/useInfiniteScroll.esm.js +21 -0
  264. package/dist/features/repo/useInfiniteScroll.esm.js.map +1 -0
  265. package/dist/features/repos/ReposListPage.esm.js +53 -0
  266. package/dist/features/repos/ReposListPage.esm.js.map +1 -0
  267. package/dist/features/repos/queries.esm.js +40 -0
  268. package/dist/features/repos/queries.esm.js.map +1 -0
  269. package/dist/features/repos/repoColumns.esm.js +121 -0
  270. package/dist/features/repos/repoColumns.esm.js.map +1 -0
  271. package/dist/features/repos/useRepos.esm.js +22 -0
  272. package/dist/features/repos/useRepos.esm.js.map +1 -0
  273. package/dist/features/resource/OriginChip.esm.js +42 -0
  274. package/dist/features/resource/OriginChip.esm.js.map +1 -0
  275. package/dist/features/resource/ResourceDetailsPage.esm.js +167 -0
  276. package/dist/features/resource/ResourceDetailsPage.esm.js.map +1 -0
  277. package/dist/features/resource/queries.esm.js +141 -0
  278. package/dist/features/resource/queries.esm.js.map +1 -0
  279. package/dist/features/resource/tabs/GeneralTab.esm.js +247 -0
  280. package/dist/features/resource/tabs/GeneralTab.esm.js.map +1 -0
  281. package/dist/features/resource/tabs/GeneralTab.loading.esm.js +76 -0
  282. package/dist/features/resource/tabs/GeneralTab.loading.esm.js.map +1 -0
  283. package/dist/features/resource/tabs/PermissionsTab.esm.js +57 -0
  284. package/dist/features/resource/tabs/PermissionsTab.esm.js.map +1 -0
  285. package/dist/features/resource/tabs/SettingsTabLayout.esm.js +18 -0
  286. package/dist/features/resource/tabs/SettingsTabLayout.esm.js.map +1 -0
  287. package/dist/features/resource/tabs/TabHeader.esm.js +30 -0
  288. package/dist/features/resource/tabs/TabHeader.esm.js.map +1 -0
  289. package/dist/features/resource/tabs/UsagePanel.esm.js +35 -0
  290. package/dist/features/resource/tabs/UsagePanel.esm.js.map +1 -0
  291. package/dist/features/resource/tabs/UsageTab.esm.js +91 -0
  292. package/dist/features/resource/tabs/UsageTab.esm.js.map +1 -0
  293. package/dist/features/resource/tabs/UsageTab.helpers.esm.js +168 -0
  294. package/dist/features/resource/tabs/UsageTab.helpers.esm.js.map +1 -0
  295. package/dist/features/resources/ResourcesEmptyState.esm.js +148 -0
  296. package/dist/features/resources/ResourcesEmptyState.esm.js.map +1 -0
  297. package/dist/features/resources/ResourcesListPage.esm.js +115 -0
  298. package/dist/features/resources/ResourcesListPage.esm.js.map +1 -0
  299. package/dist/features/resources/queries.esm.js +50 -0
  300. package/dist/features/resources/queries.esm.js.map +1 -0
  301. package/dist/features/resources/resourceColumns.esm.js +158 -0
  302. package/dist/features/resources/resourceColumns.esm.js.map +1 -0
  303. package/dist/features/resources/resourceConstants.esm.js +7 -0
  304. package/dist/features/resources/resourceConstants.esm.js.map +1 -0
  305. package/dist/features/resources/toResourceRow.esm.js +29 -0
  306. package/dist/features/resources/toResourceRow.esm.js.map +1 -0
  307. package/dist/hooks/useAuthedSvg.esm.js +34 -0
  308. package/dist/hooks/useAuthedSvg.esm.js.map +1 -0
  309. package/dist/hooks/useCursorPagination.esm.js +40 -0
  310. package/dist/hooks/useCursorPagination.esm.js.map +1 -0
  311. package/dist/hooks/useMassdriverSubscription.esm.js +61 -0
  312. package/dist/hooks/useMassdriverSubscription.esm.js.map +1 -0
  313. package/dist/hooks/usePaginatedRelayQuery.esm.js +68 -0
  314. package/dist/hooks/usePaginatedRelayQuery.esm.js.map +1 -0
  315. package/dist/index.d.ts +256 -0
  316. package/dist/index.esm.js +8 -0
  317. package/dist/index.esm.js.map +1 -0
  318. package/dist/internalRoutes.esm.js +29 -0
  319. package/dist/internalRoutes.esm.js.map +1 -0
  320. package/dist/plugin.esm.js +57 -0
  321. package/dist/plugin.esm.js.map +1 -0
  322. package/dist/queries.esm.js +54 -0
  323. package/dist/queries.esm.js.map +1 -0
  324. package/dist/routes.esm.js +6 -0
  325. package/dist/routes.esm.js.map +1 -0
  326. package/dist/shell/MassdriverHeader.esm.js +37 -0
  327. package/dist/shell/MassdriverHeader.esm.js.map +1 -0
  328. package/dist/shell/MassdriverShell.esm.js +30 -0
  329. package/dist/shell/MassdriverShell.esm.js.map +1 -0
  330. package/dist/theme/MassdriverThemeScope.esm.js +30 -0
  331. package/dist/theme/MassdriverThemeScope.esm.js.map +1 -0
  332. package/dist/theme/ThemeModeContext.esm.js +35 -0
  333. package/dist/theme/ThemeModeContext.esm.js.map +1 -0
  334. package/dist/theme/muiClassNameAudit.esm.js +11 -0
  335. package/dist/theme/muiClassNameAudit.esm.js.map +1 -0
  336. package/dist/useInstances.esm.js +39 -0
  337. package/dist/useInstances.esm.js.map +1 -0
  338. package/dist/utils/attributes.esm.js +28 -0
  339. package/dist/utils/attributes.esm.js.map +1 -0
  340. package/dist/utils/conditions.esm.js +20 -0
  341. package/dist/utils/conditions.esm.js.map +1 -0
  342. package/dist/utils/formatRelativeTime.esm.js +40 -0
  343. package/dist/utils/formatRelativeTime.esm.js.map +1 -0
  344. package/dist/utils/instanceStatuses.esm.js +74 -0
  345. package/dist/utils/instanceStatuses.esm.js.map +1 -0
  346. package/package.json +92 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MassdriverThemeScope.esm.js","sources":["../../src/theme/MassdriverThemeScope.tsx"],"sourcesContent":["import createCache from '@emotion/cache';\nimport { CacheProvider } from '@emotion/react';\nimport { DarkTheme, LightTheme } from '@massdriver/ui/theme';\nimport ScopedCssBaseline from '@mui/material/ScopedCssBaseline';\nimport { ThemeProvider } from '@mui/material/styles';\nimport { ReactNode, useEffect } from 'react';\nimport { auditMuiClassNameConsistency } from './muiClassNameAudit';\nimport { useThemeMode } from './ThemeModeContext';\n\n// Dedicated Emotion cache for @massdriver/ui (MUI v5), keeping the island's\n// style tags separate from Backstage's default caches. v4/v5 class-name\n// collisions are prevented upstream: Backstage's UnifiedThemeProvider\n// configures MUI v5's ClassNameGenerator to prefix slot classes (`v5-Mui*`),\n// so Backstage's v4 rules can't match v5 DOM — which also means hardcoded\n// `.Mui*` slot selectors never match; build them from theme/muiClasses.ts.\nconst massdriverCache = createCache({ key: 'mdui' });\n\n// Dev-only, once per page load: surface the boot-graph freeze (see\n// muiClassNameAudit.ts) instead of letting it manifest as unexplained visual\n// glitches in host apps we don't control.\nlet classNameAuditDone = false;\n\n/**\n * Applies the Massdriver theme (light/dark, driven by ThemeModeContext) to a\n * subtree so `@massdriver/ui` components render correctly. Uses\n * `ScopedCssBaseline` rather than the global `CssBaseline` that\n * `MassdriverThemeProvider` injects, so Backstage's chrome is left untouched.\n *\n * @public\n */\nexport const MassdriverThemeScope = ({ children }: { children: ReactNode }) => {\n const { mode } = useThemeMode();\n const theme = mode === 'dark' ? DarkTheme : LightTheme;\n\n useEffect(() => {\n if (classNameAuditDone || process.env.NODE_ENV === 'production') {\n return;\n }\n classNameAuditDone = true;\n const warning = auditMuiClassNameConsistency();\n if (warning) {\n // eslint-disable-next-line no-console\n console.warn(warning);\n }\n }, []);\n\n return (\n <CacheProvider value={massdriverCache}>\n <ThemeProvider theme={theme}>\n <ScopedCssBaseline>{children}</ScopedCssBaseline>\n </ThemeProvider>\n </CacheProvider>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;AAeA,MAAM,eAAA,GAAkB,WAAA,CAAY,EAAE,GAAA,EAAK,QAAQ,CAAA;AAKnD,IAAI,kBAAA,GAAqB,KAAA;AAUlB,MAAM,oBAAA,GAAuB,CAAC,EAAE,QAAA,EAAS,KAA+B;AAC7E,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,YAAA,EAAa;AAC9B,EAAA,MAAM,KAAA,GAAQ,IAAA,KAAS,MAAA,GAAS,SAAA,GAAY,UAAA;AAE5C,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,kBAAA,IAAsB,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AAC/D,MAAA;AAAA,IACF;AACA,IAAA,kBAAA,GAAqB,IAAA;AACrB,IAAA,MAAM,UAAU,4BAAA,EAA6B;AAC7C,IAAA,IAAI,OAAA,EAAS;AAEX,MAAA,OAAA,CAAQ,KAAK,OAAO,CAAA;AAAA,IACtB;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,uBACE,GAAA,CAAC,aAAA,EAAA,EAAc,KAAA,EAAO,eAAA,EACpB,QAAA,kBAAA,GAAA,CAAC,aAAA,EAAA,EAAc,KAAA,EACb,QAAA,kBAAA,GAAA,CAAC,iBAAA,EAAA,EAAmB,QAAA,EAAS,CAAA,EAC/B,CAAA,EACF,CAAA;AAEJ;;;;"}
@@ -0,0 +1,35 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { useState, useCallback, useMemo, createContext, useContext } from 'react';
3
+
4
+ const STORAGE_KEY = "massdriver-theme-mode";
5
+ const getInitialMode = () => {
6
+ try {
7
+ const stored = window.localStorage.getItem(STORAGE_KEY);
8
+ if (stored === "dark" || stored === "light") {
9
+ return stored;
10
+ }
11
+ } catch {
12
+ }
13
+ return "light";
14
+ };
15
+ const ThemeModeContext = createContext({ mode: "light", toggleMode: () => {
16
+ } });
17
+ const ThemeModeProvider = ({ children }) => {
18
+ const [mode, setMode] = useState(getInitialMode);
19
+ const toggleMode = useCallback(() => {
20
+ setMode((prev) => {
21
+ const next = prev === "light" ? "dark" : "light";
22
+ try {
23
+ window.localStorage.setItem(STORAGE_KEY, next);
24
+ } catch {
25
+ }
26
+ return next;
27
+ });
28
+ }, []);
29
+ const value = useMemo(() => ({ mode, toggleMode }), [mode, toggleMode]);
30
+ return /* @__PURE__ */ jsx(ThemeModeContext.Provider, { value, children });
31
+ };
32
+ const useThemeMode = () => useContext(ThemeModeContext);
33
+
34
+ export { ThemeModeProvider, useThemeMode };
35
+ //# sourceMappingURL=ThemeModeContext.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeModeContext.esm.js","sources":["../../src/theme/ThemeModeContext.tsx"],"sourcesContent":["import {\n createContext,\n ReactNode,\n useCallback,\n useContext,\n useMemo,\n useState,\n} from 'react';\n\nexport type ThemeMode = 'light' | 'dark';\n\nconst STORAGE_KEY = 'massdriver-theme-mode';\n\nconst getInitialMode = (): ThemeMode => {\n try {\n const stored = window.localStorage.getItem(STORAGE_KEY);\n if (stored === 'dark' || stored === 'light') {\n return stored;\n }\n } catch {\n // localStorage unavailable (SSR / restricted) — fall through to default.\n }\n return 'light';\n};\n\nconst ThemeModeContext = createContext<{\n mode: ThemeMode;\n toggleMode: () => void;\n}>({ mode: 'light', toggleMode: () => {} });\n\n/**\n * Owns the Massdriver light/dark mode for the in-Backstage views. Independent\n * of Backstage's own theme; persisted to localStorage (mirrors the web app's\n * `useThemeModeState`).\n */\nexport const ThemeModeProvider = ({ children }: { children: ReactNode }) => {\n const [mode, setMode] = useState<ThemeMode>(getInitialMode);\n\n const toggleMode = useCallback(() => {\n setMode(prev => {\n const next = prev === 'light' ? 'dark' : 'light';\n try {\n window.localStorage.setItem(STORAGE_KEY, next);\n } catch {\n // ignore persistence failures\n }\n return next;\n });\n }, []);\n\n const value = useMemo(() => ({ mode, toggleMode }), [mode, toggleMode]);\n\n return (\n <ThemeModeContext.Provider value={value}>\n {children}\n </ThemeModeContext.Provider>\n );\n};\n\nexport const useThemeMode = () => useContext(ThemeModeContext);\n"],"names":[],"mappings":";;;AAWA,MAAM,WAAA,GAAc,uBAAA;AAEpB,MAAM,iBAAiB,MAAiB;AACtC,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,YAAA,CAAa,OAAA,CAAQ,WAAW,CAAA;AACtD,IAAA,IAAI,MAAA,KAAW,MAAA,IAAU,MAAA,KAAW,OAAA,EAAS;AAC3C,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AACA,EAAA,OAAO,OAAA;AACT,CAAA;AAEA,MAAM,mBAAmB,aAAA,CAGtB,EAAE,IAAA,EAAM,OAAA,EAAS,YAAY,MAAM;AAAC,CAAA,EAAG,CAAA;AAOnC,MAAM,iBAAA,GAAoB,CAAC,EAAE,QAAA,EAAS,KAA+B;AAC1E,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAAoB,cAAc,CAAA;AAE1D,EAAA,MAAM,UAAA,GAAa,YAAY,MAAM;AACnC,IAAA,OAAA,CAAQ,CAAA,IAAA,KAAQ;AACd,MAAA,MAAM,IAAA,GAAO,IAAA,KAAS,OAAA,GAAU,MAAA,GAAS,OAAA;AACzC,MAAA,IAAI;AACF,QAAA,MAAA,CAAO,YAAA,CAAa,OAAA,CAAQ,WAAA,EAAa,IAAI,CAAA;AAAA,MAC/C,CAAA,CAAA,MAAQ;AAAA,MAER;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,OAAO,EAAE,IAAA,EAAM,YAAW,CAAA,EAAI,CAAC,IAAA,EAAM,UAAU,CAAC,CAAA;AAEtE,EAAA,uBACE,GAAA,CAAC,gBAAA,CAAiB,QAAA,EAAjB,EAA0B,OACxB,QAAA,EACH,CAAA;AAEJ;AAEO,MAAM,YAAA,GAAe,MAAM,UAAA,CAAW,gBAAgB;;;;"}
@@ -0,0 +1,11 @@
1
+ import { unstable_ClassNameGenerator } from '@mui/material/className';
2
+ import { switchClasses } from '@mui/material/Switch';
3
+
4
+ const auditMuiClassNameConsistency = () => {
5
+ const frozen = switchClasses.thumb;
6
+ const current = `${unstable_ClassNameGenerator.generate("MuiSwitch")}-thumb`;
7
+ return frozen === current ? null : `[backstage-plugin-massdriver] MUI v5 class-name mismatch detected: slot-class constants were frozen as "${frozen}" but components now render "${current}". Something in this app evaluates @mui/material before Backstage configures its class-name prefix \u2014 usually an eager import of a MUI v5 component (or of a library that re-exports one) in app chrome or in a plugin's package root. Until that import is made lazy, cross-slot styles in MUI v5 plugins will be subtly broken (misaligned Switch thumbs, Tooltip arrows, \u2026). See https://github.com/backstage/backstage/issues/31846.`;
8
+ };
9
+
10
+ export { auditMuiClassNameConsistency };
11
+ //# sourceMappingURL=muiClassNameAudit.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"muiClassNameAudit.esm.js","sources":["../../src/theme/muiClassNameAudit.ts"],"sourcesContent":["import { unstable_ClassNameGenerator } from '@mui/material/className';\nimport { switchClasses } from '@mui/material/Switch';\n\n/**\n * Detects the \"boot-graph freeze\" (backstage#31846): MUI v5 freezes slot-class\n * constants and internal cross-slot selectors at module evaluation. If the\n * host app evaluated `@mui/material` before Backstage's UnifiedThemeProvider\n * configured its `v5-` ClassNameGenerator prefix, those frozen names disagree\n * with the names components render, and cross-slot styling silently breaks\n * (misaligned Switch thumbs, Tooltip arrows, …) for every MUI v5 plugin.\n *\n * Compares a representative frozen constant against what the generator\n * produces now. Returns a warning message on mismatch, null when consistent\n * (either regime — prefixed or unprefixed — is fine as long as both sides\n * agree).\n */\nexport const auditMuiClassNameConsistency = (): string | null => {\n const frozen = switchClasses.thumb;\n const current = `${unstable_ClassNameGenerator.generate('MuiSwitch')}-thumb`;\n return frozen === current\n ? null\n : `[backstage-plugin-massdriver] MUI v5 class-name mismatch detected: ` +\n `slot-class constants were frozen as \"${frozen}\" but components now render \"${current}\". ` +\n `Something in this app evaluates @mui/material before Backstage configures its ` +\n `class-name prefix — usually an eager import of a MUI v5 component (or of a ` +\n `library that re-exports one) in app chrome or in a plugin's package root. ` +\n `Until that import is made lazy, cross-slot styles in MUI v5 plugins will be ` +\n `subtly broken (misaligned Switch thumbs, Tooltip arrows, …). ` +\n `See https://github.com/backstage/backstage/issues/31846.`;\n};\n"],"names":[],"mappings":";;;AAgBO,MAAM,+BAA+B,MAAqB;AAC/D,EAAA,MAAM,SAAS,aAAA,CAAc,KAAA;AAC7B,EAAA,MAAM,OAAA,GAAU,CAAA,EAAG,2BAAA,CAA4B,QAAA,CAAS,WAAW,CAAC,CAAA,MAAA,CAAA;AACpE,EAAA,OAAO,WAAW,OAAA,GACd,IAAA,GACA,CAAA,wGAAA,EAC0C,MAAM,gCAAgC,OAAO,CAAA,ibAAA,CAAA;AAO7F;;;;"}
@@ -0,0 +1,39 @@
1
+ import { useApi } from '@backstage/frontend-plugin-api';
2
+ import useAsync from 'react-use/esm/useAsync';
3
+ import { massdriverApiRef } from './api.esm.js';
4
+ import { INSTANCE_BY_ID, INSTANCES_BY_PROJECT, INSTANCES_BY_ENVIRONMENT } from './queries.esm.js';
5
+
6
+ const useMassdriverInstances = (scope) => {
7
+ const api = useApi(massdriverApiRef);
8
+ return useAsync(async () => {
9
+ if (!scope) {
10
+ return [];
11
+ }
12
+ if (scope.kind === "instance") {
13
+ const result = await api.query(INSTANCE_BY_ID, {
14
+ id: scope.instanceId
15
+ });
16
+ return result.instance ? [result.instance] : [];
17
+ }
18
+ const query = scope.kind === "project" ? INSTANCES_BY_PROJECT : INSTANCES_BY_ENVIRONMENT;
19
+ const variables = scope.kind === "project" ? { projectId: scope.projectId } : { environmentId: scope.environmentId };
20
+ const rows = [];
21
+ let next = null;
22
+ do {
23
+ const page = await api.query(query, {
24
+ ...variables,
25
+ cursor: { limit: 100, next }
26
+ });
27
+ for (const item of page.instances.items ?? []) {
28
+ if (item) {
29
+ rows.push(item);
30
+ }
31
+ }
32
+ next = page.instances.cursor?.next ?? null;
33
+ } while (next);
34
+ return rows;
35
+ }, [api, scope?.kind, JSON.stringify(scope)]);
36
+ };
37
+
38
+ export { useMassdriverInstances };
39
+ //# sourceMappingURL=useInstances.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useInstances.esm.js","sources":["../src/useInstances.ts"],"sourcesContent":["import { useApi } from '@backstage/frontend-plugin-api';\nimport useAsync, { AsyncState } from 'react-use/esm/useAsync';\nimport { massdriverApiRef } from './api';\nimport { MassdriverScope } from './entity';\nimport {\n INSTANCE_BY_ID,\n INSTANCES_BY_ENVIRONMENT,\n INSTANCES_BY_PROJECT,\n InstanceResult,\n InstanceRow,\n InstancesPageResult,\n} from './queries';\n\n/**\n * Fetch the Massdriver instances for a scope. Projects and environments return\n * a full (cursor-paginated) list; an instance scope returns just that instance.\n */\nexport const useMassdriverInstances = (\n scope: MassdriverScope | undefined,\n): AsyncState<InstanceRow[]> => {\n const api = useApi(massdriverApiRef);\n\n return useAsync(async (): Promise<InstanceRow[]> => {\n if (!scope) {\n return [];\n }\n\n if (scope.kind === 'instance') {\n const result = (await api.query(INSTANCE_BY_ID, {\n id: scope.instanceId,\n })) as InstanceResult;\n return result.instance ? [result.instance] : [];\n }\n\n const query =\n scope.kind === 'project'\n ? INSTANCES_BY_PROJECT\n : INSTANCES_BY_ENVIRONMENT;\n const variables =\n scope.kind === 'project'\n ? { projectId: scope.projectId }\n : { environmentId: scope.environmentId };\n\n const rows: InstanceRow[] = [];\n let next: string | null = null;\n do {\n const page = (await api.query(query, {\n ...variables,\n cursor: { limit: 100, next },\n })) as InstancesPageResult;\n for (const item of page.instances.items ?? []) {\n if (item) {\n rows.push(item);\n }\n }\n next = page.instances.cursor?.next ?? null;\n } while (next);\n return rows;\n }, [api, scope?.kind, JSON.stringify(scope)]);\n};\n"],"names":[],"mappings":";;;;;AAiBO,MAAM,sBAAA,GAAyB,CACpC,KAAA,KAC8B;AAC9B,EAAA,MAAM,GAAA,GAAM,OAAO,gBAAgB,CAAA;AAEnC,EAAA,OAAO,SAAS,YAAoC;AAClD,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,IAAI,KAAA,CAAM,SAAS,UAAA,EAAY;AAC7B,MAAA,MAAM,MAAA,GAAU,MAAM,GAAA,CAAI,KAAA,CAAM,cAAA,EAAgB;AAAA,QAC9C,IAAI,KAAA,CAAM;AAAA,OACX,CAAA;AACD,MAAA,OAAO,OAAO,QAAA,GAAW,CAAC,MAAA,CAAO,QAAQ,IAAI,EAAC;AAAA,IAChD;AAEA,IAAA,MAAM,KAAA,GACJ,KAAA,CAAM,IAAA,KAAS,SAAA,GACX,oBAAA,GACA,wBAAA;AACN,IAAA,MAAM,SAAA,GACJ,KAAA,CAAM,IAAA,KAAS,SAAA,GACX,EAAE,SAAA,EAAW,KAAA,CAAM,SAAA,EAAU,GAC7B,EAAE,aAAA,EAAe,KAAA,CAAM,aAAA,EAAc;AAE3C,IAAA,MAAM,OAAsB,EAAC;AAC7B,IAAA,IAAI,IAAA,GAAsB,IAAA;AAC1B,IAAA,GAAG;AACD,MAAA,MAAM,IAAA,GAAQ,MAAM,GAAA,CAAI,KAAA,CAAM,KAAA,EAAO;AAAA,QACnC,GAAG,SAAA;AAAA,QACH,MAAA,EAAQ,EAAE,KAAA,EAAO,GAAA,EAAK,IAAA;AAAK,OAC5B,CAAA;AACD,MAAA,KAAA,MAAW,IAAA,IAAQ,IAAA,CAAK,SAAA,CAAU,KAAA,IAAS,EAAC,EAAG;AAC7C,QAAA,IAAI,IAAA,EAAM;AACR,UAAA,IAAA,CAAK,KAAK,IAAI,CAAA;AAAA,QAChB;AAAA,MACF;AACA,MAAA,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,IAAQ,IAAA;AAAA,IACxC,CAAA,QAAS,IAAA;AACT,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,EAAG,CAAC,GAAA,EAAK,KAAA,EAAO,MAAM,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAC,CAAA;AAC9C;;;;"}
@@ -0,0 +1,28 @@
1
+ const parseMap = (value) => {
2
+ if (value == null) {
3
+ return null;
4
+ }
5
+ if (typeof value === "object") {
6
+ return value;
7
+ }
8
+ if (typeof value === "string") {
9
+ try {
10
+ return JSON.parse(value);
11
+ } catch {
12
+ return null;
13
+ }
14
+ }
15
+ return null;
16
+ };
17
+ const formatAttributeValue = (value) => {
18
+ if (value === "*") {
19
+ return "any";
20
+ }
21
+ if (Array.isArray(value)) {
22
+ return value.length === 0 ? "any" : value.join(", ");
23
+ }
24
+ return String(value);
25
+ };
26
+
27
+ export { formatAttributeValue, parseMap };
28
+ //# sourceMappingURL=attributes.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attributes.esm.js","sources":["../../src/utils/attributes.ts"],"sourcesContent":["/** Parse a Massdriver `Map` scalar (object or JSON string) into an object. */\nexport const parseMap = (value: unknown): Record<string, unknown> | null => {\n if (value == null) {\n return null;\n }\n if (typeof value === 'object') {\n return value as Record<string, unknown>;\n }\n if (typeof value === 'string') {\n try {\n return JSON.parse(value) as Record<string, unknown>;\n } catch {\n return null;\n }\n }\n return null;\n};\n\n/** Format an attribute value for display (mirrors the web app). */\nexport const formatAttributeValue = (value: unknown): string => {\n if (value === '*') {\n return 'any';\n }\n if (Array.isArray(value)) {\n return value.length === 0 ? 'any' : value.join(', ');\n }\n return String(value);\n};\n"],"names":[],"mappings":"AACO,MAAM,QAAA,GAAW,CAAC,KAAA,KAAmD;AAC1E,EAAA,IAAI,SAAS,IAAA,EAAM;AACjB,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA,IACzB,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAGO,MAAM,oBAAA,GAAuB,CAAC,KAAA,KAA2B;AAC9D,EAAA,IAAI,UAAU,GAAA,EAAK;AACjB,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,MAAM,MAAA,KAAW,CAAA,GAAI,KAAA,GAAQ,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACrD;AACA,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;;;;"}
@@ -0,0 +1,20 @@
1
+ const denormalizeConditionsFromWire = (conditions) => {
2
+ if (!conditions || conditions === "*") return {};
3
+ if (typeof conditions === "string") {
4
+ try {
5
+ const parsed = JSON.parse(conditions);
6
+ if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
7
+ return parsed;
8
+ }
9
+ } catch {
10
+ }
11
+ return {};
12
+ }
13
+ if (typeof conditions === "object" && !Array.isArray(conditions)) {
14
+ return conditions;
15
+ }
16
+ return {};
17
+ };
18
+
19
+ export { denormalizeConditionsFromWire };
20
+ //# sourceMappingURL=conditions.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conditions.esm.js","sources":["../../src/utils/conditions.ts"],"sourcesContent":["// Ported from apps/web/shared/utils/conditions.js (read path only — the\n// normalize-for-wire half backs mutation forms the read-only plugin doesn't\n// have).\n\n/**\n * Grant conditions come back from the API as either the literal `\"*\"` or a\n * JSON-encoded object string. Coerce both forms (and any defensive edge cases)\n * into the plain-object shape the cell components expect.\n */\nexport const denormalizeConditionsFromWire = (\n conditions: unknown,\n): Record<string, unknown> => {\n if (!conditions || conditions === '*') return {};\n if (typeof conditions === 'string') {\n try {\n const parsed = JSON.parse(conditions);\n if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {\n return parsed;\n }\n } catch {\n // fall through to {}\n }\n return {};\n }\n if (typeof conditions === 'object' && !Array.isArray(conditions)) {\n return conditions as Record<string, unknown>;\n }\n return {};\n};\n"],"names":[],"mappings":"AASO,MAAM,6BAAA,GAAgC,CAC3C,UAAA,KAC4B;AAC5B,EAAA,IAAI,CAAC,UAAA,IAAc,UAAA,KAAe,GAAA,SAAY,EAAC;AAC/C,EAAA,IAAI,OAAO,eAAe,QAAA,EAAU;AAClC,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,UAAU,CAAA;AACpC,MAAA,IAAI,MAAA,IAAU,OAAO,MAAA,KAAW,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AAClE,QAAA,OAAO,MAAA;AAAA,MACT;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AACA,IAAA,OAAO,EAAC;AAAA,EACV;AACA,EAAA,IAAI,OAAO,UAAA,KAAe,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,UAAU,CAAA,EAAG;AAChE,IAAA,OAAO,UAAA;AAAA,EACT;AACA,EAAA,OAAO,EAAC;AACV;;;;"}
@@ -0,0 +1,40 @@
1
+ const DIVISIONS = [
2
+ { amount: 60, unit: "seconds" },
3
+ { amount: 60, unit: "minutes" },
4
+ { amount: 24, unit: "hours" },
5
+ { amount: 7, unit: "days" },
6
+ { amount: 4.34524, unit: "weeks" },
7
+ { amount: 12, unit: "months" },
8
+ { amount: Number.POSITIVE_INFINITY, unit: "years" }
9
+ ];
10
+ const rtf = new Intl.RelativeTimeFormat(void 0, { numeric: "always" });
11
+ const formatRelativeTime = (iso) => {
12
+ if (!iso) {
13
+ return "--";
14
+ }
15
+ const date = new Date(iso);
16
+ if (Number.isNaN(date.getTime())) {
17
+ return "--";
18
+ }
19
+ let duration = (date.getTime() - Date.now()) / 1e3;
20
+ for (const division of DIVISIONS) {
21
+ if (Math.abs(duration) < division.amount) {
22
+ return rtf.format(Math.round(duration), division.unit);
23
+ }
24
+ duration /= division.amount;
25
+ }
26
+ return "--";
27
+ };
28
+ const formatCurrency = (amount, currency = "USD", fallback = "--") => amount != null ? new Intl.NumberFormat("en-US", { style: "currency", currency }).format(
29
+ amount
30
+ ) : fallback;
31
+ const formatAbsoluteTime = (iso) => {
32
+ if (!iso) {
33
+ return "";
34
+ }
35
+ const date = new Date(iso);
36
+ return Number.isNaN(date.getTime()) ? "" : date.toLocaleString();
37
+ };
38
+
39
+ export { formatAbsoluteTime, formatCurrency, formatRelativeTime };
40
+ //# sourceMappingURL=formatRelativeTime.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatRelativeTime.esm.js","sources":["../../src/utils/formatRelativeTime.ts"],"sourcesContent":["const DIVISIONS: Array<{ amount: number; unit: Intl.RelativeTimeFormatUnit }> =\n [\n { amount: 60, unit: 'seconds' },\n { amount: 60, unit: 'minutes' },\n { amount: 24, unit: 'hours' },\n { amount: 7, unit: 'days' },\n { amount: 4.34524, unit: 'weeks' },\n { amount: 12, unit: 'months' },\n { amount: Number.POSITIVE_INFINITY, unit: 'years' },\n ];\n\nconst rtf = new Intl.RelativeTimeFormat(undefined, { numeric: 'always' });\n\n/** Format an ISO timestamp as a relative time, e.g. \"3 days ago\". */\nexport const formatRelativeTime = (iso: string | null | undefined): string => {\n if (!iso) {\n return '--';\n }\n const date = new Date(iso);\n if (Number.isNaN(date.getTime())) {\n return '--';\n }\n let duration = (date.getTime() - Date.now()) / 1000;\n for (const division of DIVISIONS) {\n if (Math.abs(duration) < division.amount) {\n return rtf.format(Math.round(duration), division.unit);\n }\n duration /= division.amount;\n }\n return '--';\n};\n\n/** Format an amount as currency, mirroring the web app's `formatCurrency`. */\nexport const formatCurrency = (\n amount: number | null | undefined,\n currency = 'USD',\n fallback = '--',\n): string =>\n amount != null\n ? new Intl.NumberFormat('en-US', { style: 'currency', currency }).format(\n amount,\n )\n : fallback;\n\n/** Absolute, human-readable timestamp for tooltips. */\nexport const formatAbsoluteTime = (iso: string | null | undefined): string => {\n if (!iso) {\n return '';\n }\n const date = new Date(iso);\n return Number.isNaN(date.getTime()) ? '' : date.toLocaleString();\n};\n"],"names":[],"mappings":"AAAA,MAAM,SAAA,GACJ;AAAA,EACE,EAAE,MAAA,EAAQ,EAAA,EAAI,IAAA,EAAM,SAAA,EAAU;AAAA,EAC9B,EAAE,MAAA,EAAQ,EAAA,EAAI,IAAA,EAAM,SAAA,EAAU;AAAA,EAC9B,EAAE,MAAA,EAAQ,EAAA,EAAI,IAAA,EAAM,OAAA,EAAQ;AAAA,EAC5B,EAAE,MAAA,EAAQ,CAAA,EAAG,IAAA,EAAM,MAAA,EAAO;AAAA,EAC1B,EAAE,MAAA,EAAQ,OAAA,EAAS,IAAA,EAAM,OAAA,EAAQ;AAAA,EACjC,EAAE,MAAA,EAAQ,EAAA,EAAI,IAAA,EAAM,QAAA,EAAS;AAAA,EAC7B,EAAE,MAAA,EAAQ,MAAA,CAAO,iBAAA,EAAmB,MAAM,OAAA;AAC5C,CAAA;AAEF,MAAM,GAAA,GAAM,IAAI,IAAA,CAAK,kBAAA,CAAmB,QAAW,EAAE,OAAA,EAAS,UAAU,CAAA;AAGjE,MAAM,kBAAA,GAAqB,CAAC,GAAA,KAA2C;AAC5E,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,GAAG,CAAA;AACzB,EAAA,IAAI,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS,CAAA,EAAG;AAChC,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,YAAY,IAAA,CAAK,OAAA,EAAQ,GAAI,IAAA,CAAK,KAAI,IAAK,GAAA;AAC/C,EAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AAChC,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,QAAQ,CAAA,GAAI,SAAS,MAAA,EAAQ;AACxC,MAAA,OAAO,IAAI,MAAA,CAAO,IAAA,CAAK,MAAM,QAAQ,CAAA,EAAG,SAAS,IAAI,CAAA;AAAA,IACvD;AACA,IAAA,QAAA,IAAY,QAAA,CAAS,MAAA;AAAA,EACvB;AACA,EAAA,OAAO,IAAA;AACT;AAGO,MAAM,iBAAiB,CAC5B,MAAA,EACA,WAAW,KAAA,EACX,QAAA,GAAW,SAEX,MAAA,IAAU,IAAA,GACN,IAAI,IAAA,CAAK,aAAa,OAAA,EAAS,EAAE,OAAO,UAAA,EAAY,QAAA,EAAU,CAAA,CAAE,MAAA;AAAA,EAC9D;AACF,CAAA,GACA;AAGC,MAAM,kBAAA,GAAqB,CAAC,GAAA,KAA2C;AAC5E,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,OAAO,EAAA;AAAA,EACT;AACA,EAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,GAAG,CAAA;AACzB,EAAA,OAAO,MAAA,CAAO,MAAM,IAAA,CAAK,OAAA,EAAS,CAAA,GAAI,EAAA,GAAK,KAAK,cAAA,EAAe;AACjE;;;;"}
@@ -0,0 +1,74 @@
1
+ const INSTANCE_STATUS = {
2
+ INITIALIZED: "INITIALIZED",
3
+ EXTERNAL: "EXTERNAL",
4
+ PROVISIONED: "PROVISIONED",
5
+ DECOMMISSIONED: "DECOMMISSIONED",
6
+ FAILED: "FAILED"
7
+ };
8
+ const STATIC_LABELS = {
9
+ [INSTANCE_STATUS.INITIALIZED]: "Initialized",
10
+ [INSTANCE_STATUS.PROVISIONED]: "Provisioned",
11
+ [INSTANCE_STATUS.DECOMMISSIONED]: "Decommissioned",
12
+ [INSTANCE_STATUS.EXTERNAL]: "Remote Reference",
13
+ [INSTANCE_STATUS.FAILED]: "Deployment Failed"
14
+ };
15
+ const ACTION_LABELS = {
16
+ PLAN: "Plan",
17
+ PROVISION: "Provision",
18
+ DECOMMISSION: "Decommission"
19
+ };
20
+ const ACTION_PARTICIPLES = {
21
+ PLAN: { gerund: "Planning", past: "Planned" },
22
+ PROVISION: { gerund: "Provisioning", past: "Provisioned" },
23
+ DECOMMISSION: { gerund: "Decommissioning", past: "Decommissioned" }
24
+ };
25
+ const STATUS_TITLES = {
26
+ PROPOSED: "Proposed",
27
+ APPROVED: "Approved",
28
+ PENDING: "Pending",
29
+ RUNNING: "Running",
30
+ COMPLETED: "Completed",
31
+ FAILED: "Failed",
32
+ REJECTED: "Rejected"
33
+ };
34
+ const isDeploymentActive = (status) => status === "PENDING" || status === "RUNNING";
35
+ const isDeploymentFailure = (status) => status === "FAILED" || status === "REJECTED";
36
+ const isStaticInstanceStatus = (status) => Boolean(status && STATIC_LABELS[status]);
37
+ const isInstanceStatusActionable = (status) => {
38
+ if (!status || isStaticInstanceStatus(status)) return false;
39
+ const [, deploymentStatus] = status.split("_");
40
+ return isDeploymentActive(deploymentStatus) || isDeploymentFailure(deploymentStatus);
41
+ };
42
+ const composeInstanceStatus = (action, status) => action && status ? `${action}_${status}` : null;
43
+ const deriveInstanceStatus = ({
44
+ instanceStatus,
45
+ latestDeploymentAction,
46
+ latestDeploymentStatus
47
+ } = {}) => {
48
+ if (isDeploymentActive(latestDeploymentStatus) && latestDeploymentAction) {
49
+ return composeInstanceStatus(
50
+ latestDeploymentAction,
51
+ latestDeploymentStatus
52
+ );
53
+ }
54
+ return instanceStatus ?? null;
55
+ };
56
+ const formatInstanceStatus = (status) => {
57
+ if (!status) return "\u2014";
58
+ if (STATIC_LABELS[status]) return STATIC_LABELS[status];
59
+ const [action, deploymentStatus] = status.split("_");
60
+ if (!action || !deploymentStatus) return "\u2014";
61
+ const participles = ACTION_PARTICIPLES[action];
62
+ if (deploymentStatus === "FAILED" && participles) {
63
+ return `${participles.gerund} Failed`;
64
+ }
65
+ if (deploymentStatus === "COMPLETED" && participles) {
66
+ return participles.past;
67
+ }
68
+ const actionLabel = ACTION_LABELS[action] ?? action;
69
+ const statusLabel = STATUS_TITLES[deploymentStatus] ?? deploymentStatus;
70
+ return `${actionLabel} ${statusLabel}`;
71
+ };
72
+
73
+ export { INSTANCE_STATUS, composeInstanceStatus, deriveInstanceStatus, formatInstanceStatus, isDeploymentActive, isInstanceStatusActionable };
74
+ //# sourceMappingURL=instanceStatuses.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instanceStatuses.esm.js","sources":["../../src/utils/instanceStatuses.ts"],"sourcesContent":["// Status taxonomy for instances and deployments — a faithful port of the web\n// app's `shared/constants/deploymentStatuses.js`.\n//\n// 1. INSTANCE_STATUS (static) — what the API stores on an instance once it\n// settles: INITIALIZED, EXTERNAL, PROVISIONED, DECOMMISSIONED, FAILED.\n// 2. Compound statuses — what we render while a deployment is actively in\n// flight. composeInstanceStatus(action, status) builds these\n// (e.g. PROVISION_RUNNING); deriveInstanceStatus applies them only while\n// the latest deployment is active (PENDING / RUNNING).\n// 3. formatInstanceStatus maps either kind to a human label (\"Provisioned\",\n// \"Provision Running\", \"Provisioning Failed\"). The `instanceStatusColors`\n// theme map is keyed by these same status strings, static and compound.\n//\n// All helpers take primitives — instance status, deployment action/status —\n// never full objects. The caller owns the data shape.\n\nexport const INSTANCE_STATUS = {\n INITIALIZED: 'INITIALIZED',\n EXTERNAL: 'EXTERNAL',\n PROVISIONED: 'PROVISIONED',\n DECOMMISSIONED: 'DECOMMISSIONED',\n FAILED: 'FAILED',\n} as const;\n\nconst STATIC_LABELS: Record<string, string> = {\n [INSTANCE_STATUS.INITIALIZED]: 'Initialized',\n [INSTANCE_STATUS.PROVISIONED]: 'Provisioned',\n [INSTANCE_STATUS.DECOMMISSIONED]: 'Decommissioned',\n [INSTANCE_STATUS.EXTERNAL]: 'Remote Reference',\n [INSTANCE_STATUS.FAILED]: 'Deployment Failed',\n};\n\nconst ACTION_LABELS: Record<string, string> = {\n PLAN: 'Plan',\n PROVISION: 'Provision',\n DECOMMISSION: 'Decommission',\n};\n\n// Two morphological forms per action:\n// gerund — \"Provisioning\" → used for \"<gerund> Failed\" (mid-action crash)\n// past — \"Provisioned\" → used for COMPLETED, matching the static label so\n// PROVISION_COMPLETED reads the same as PROVISIONED.\nconst ACTION_PARTICIPLES: Record<string, { gerund: string; past: string }> = {\n PLAN: { gerund: 'Planning', past: 'Planned' },\n PROVISION: { gerund: 'Provisioning', past: 'Provisioned' },\n DECOMMISSION: { gerund: 'Decommissioning', past: 'Decommissioned' },\n};\n\nconst STATUS_TITLES: Record<string, string> = {\n PROPOSED: 'Proposed',\n APPROVED: 'Approved',\n PENDING: 'Pending',\n RUNNING: 'Running',\n COMPLETED: 'Completed',\n FAILED: 'Failed',\n REJECTED: 'Rejected',\n};\n\n// \"Active\" means actually executing or queued for immediate execution —\n// PENDING is waiting to start, RUNNING is mid-flight. PROPOSED and APPROVED\n// sit around waiting for human action and do not change what the pill shows.\nexport const isDeploymentActive = (status?: string | null): boolean =>\n status === 'PENDING' || status === 'RUNNING';\n\nconst isDeploymentFailure = (status?: string | null): boolean =>\n status === 'FAILED' || status === 'REJECTED';\n\nconst isStaticInstanceStatus = (status?: string | null): boolean =>\n Boolean(status && STATIC_LABELS[status as string]);\n\n// True when the rich status implies an inspectable deployment behind it (in\n// flight or failed) — the consumer uses this to decide whether to wire a\n// click-to-open-logs handler on the pill. Mirrors the web app helper.\nexport const isInstanceStatusActionable = (status?: string | null): boolean => {\n if (!status || isStaticInstanceStatus(status)) return false;\n const [, deploymentStatus] = status.split('_');\n return (\n isDeploymentActive(deploymentStatus) ||\n isDeploymentFailure(deploymentStatus)\n );\n};\n\n// Pure combinator: action + deployment-status → compound string. Returns null\n// when either piece is missing — the caller decides on a fallback.\nexport const composeInstanceStatus = (\n action?: string | null,\n status?: string | null,\n): string | null => (action && status ? `${action}_${status}` : null);\n\n// Resolve the instance status to render from the three primitives at hand:\n// the instance's stored status plus the latest deployment's action and status.\n// Active latest deployment → compound (e.g. PROVISION_RUNNING); otherwise the\n// stored status as-is.\nexport const deriveInstanceStatus = ({\n instanceStatus,\n latestDeploymentAction,\n latestDeploymentStatus,\n}: {\n instanceStatus?: string | null;\n latestDeploymentAction?: string | null;\n latestDeploymentStatus?: string | null;\n} = {}): string | null => {\n if (isDeploymentActive(latestDeploymentStatus) && latestDeploymentAction) {\n return composeInstanceStatus(\n latestDeploymentAction,\n latestDeploymentStatus,\n );\n }\n return instanceStatus ?? null;\n};\n\n// Compound label rules:\n// *_FAILED → \"<gerund> Failed\" (\"Provisioning Failed\")\n// *_COMPLETED → \"<past>\" (\"Provisioned\")\n// everything else → \"<action> <status>\" (\"Provision Running\")\nexport const formatInstanceStatus = (status?: string | null): string => {\n if (!status) return '—';\n if (STATIC_LABELS[status]) return STATIC_LABELS[status];\n const [action, deploymentStatus] = status.split('_');\n if (!action || !deploymentStatus) return '—';\n const participles = ACTION_PARTICIPLES[action];\n if (deploymentStatus === 'FAILED' && participles) {\n return `${participles.gerund} Failed`;\n }\n if (deploymentStatus === 'COMPLETED' && participles) {\n return participles.past;\n }\n const actionLabel = ACTION_LABELS[action] ?? action;\n const statusLabel = STATUS_TITLES[deploymentStatus] ?? deploymentStatus;\n return `${actionLabel} ${statusLabel}`;\n};\n"],"names":[],"mappings":"AAgBO,MAAM,eAAA,GAAkB;AAAA,EAC7B,WAAA,EAAa,aAAA;AAAA,EACb,QAAA,EAAU,UAAA;AAAA,EACV,WAAA,EAAa,aAAA;AAAA,EACb,cAAA,EAAgB,gBAAA;AAAA,EAChB,MAAA,EAAQ;AACV;AAEA,MAAM,aAAA,GAAwC;AAAA,EAC5C,CAAC,eAAA,CAAgB,WAAW,GAAG,aAAA;AAAA,EAC/B,CAAC,eAAA,CAAgB,WAAW,GAAG,aAAA;AAAA,EAC/B,CAAC,eAAA,CAAgB,cAAc,GAAG,gBAAA;AAAA,EAClC,CAAC,eAAA,CAAgB,QAAQ,GAAG,kBAAA;AAAA,EAC5B,CAAC,eAAA,CAAgB,MAAM,GAAG;AAC5B,CAAA;AAEA,MAAM,aAAA,GAAwC;AAAA,EAC5C,IAAA,EAAM,MAAA;AAAA,EACN,SAAA,EAAW,WAAA;AAAA,EACX,YAAA,EAAc;AAChB,CAAA;AAMA,MAAM,kBAAA,GAAuE;AAAA,EAC3E,IAAA,EAAM,EAAE,MAAA,EAAQ,UAAA,EAAY,MAAM,SAAA,EAAU;AAAA,EAC5C,SAAA,EAAW,EAAE,MAAA,EAAQ,cAAA,EAAgB,MAAM,aAAA,EAAc;AAAA,EACzD,YAAA,EAAc,EAAE,MAAA,EAAQ,iBAAA,EAAmB,MAAM,gBAAA;AACnD,CAAA;AAEA,MAAM,aAAA,GAAwC;AAAA,EAC5C,QAAA,EAAU,UAAA;AAAA,EACV,QAAA,EAAU,UAAA;AAAA,EACV,OAAA,EAAS,SAAA;AAAA,EACT,OAAA,EAAS,SAAA;AAAA,EACT,SAAA,EAAW,WAAA;AAAA,EACX,MAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAU;AACZ,CAAA;AAKO,MAAM,kBAAA,GAAqB,CAAC,MAAA,KACjC,MAAA,KAAW,aAAa,MAAA,KAAW;AAErC,MAAM,mBAAA,GAAsB,CAAC,MAAA,KAC3B,MAAA,KAAW,YAAY,MAAA,KAAW,UAAA;AAEpC,MAAM,yBAAyB,CAAC,MAAA,KAC9B,QAAQ,MAAA,IAAU,aAAA,CAAc,MAAgB,CAAC,CAAA;AAK5C,MAAM,0BAAA,GAA6B,CAAC,MAAA,KAAoC;AAC7E,EAAA,IAAI,CAAC,MAAA,IAAU,sBAAA,CAAuB,MAAM,GAAG,OAAO,KAAA;AACtD,EAAA,MAAM,GAAG,gBAAgB,CAAA,GAAI,MAAA,CAAO,MAAM,GAAG,CAAA;AAC7C,EAAA,OACE,kBAAA,CAAmB,gBAAgB,CAAA,IACnC,mBAAA,CAAoB,gBAAgB,CAAA;AAExC;AAIO,MAAM,qBAAA,GAAwB,CACnC,MAAA,EACA,MAAA,KACmB,MAAA,IAAU,SAAS,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,GAAK;AAMzD,MAAM,uBAAuB,CAAC;AAAA,EACnC,cAAA;AAAA,EACA,sBAAA;AAAA,EACA;AACF,CAAA,GAII,EAAC,KAAqB;AACxB,EAAA,IAAI,kBAAA,CAAmB,sBAAsB,CAAA,IAAK,sBAAA,EAAwB;AACxE,IAAA,OAAO,qBAAA;AAAA,MACL,sBAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACA,EAAA,OAAO,cAAA,IAAkB,IAAA;AAC3B;AAMO,MAAM,oBAAA,GAAuB,CAAC,MAAA,KAAmC;AACtE,EAAA,IAAI,CAAC,QAAQ,OAAO,QAAA;AACpB,EAAA,IAAI,aAAA,CAAc,MAAM,CAAA,EAAG,OAAO,cAAc,MAAM,CAAA;AACtD,EAAA,MAAM,CAAC,MAAA,EAAQ,gBAAgB,CAAA,GAAI,MAAA,CAAO,MAAM,GAAG,CAAA;AACnD,EAAA,IAAI,CAAC,MAAA,IAAU,CAAC,gBAAA,EAAkB,OAAO,QAAA;AACzC,EAAA,MAAM,WAAA,GAAc,mBAAmB,MAAM,CAAA;AAC7C,EAAA,IAAI,gBAAA,KAAqB,YAAY,WAAA,EAAa;AAChD,IAAA,OAAO,CAAA,EAAG,YAAY,MAAM,CAAA,OAAA,CAAA;AAAA,EAC9B;AACA,EAAA,IAAI,gBAAA,KAAqB,eAAe,WAAA,EAAa;AACnD,IAAA,OAAO,WAAA,CAAY,IAAA;AAAA,EACrB;AACA,EAAA,MAAM,WAAA,GAAc,aAAA,CAAc,MAAM,CAAA,IAAK,MAAA;AAC7C,EAAA,MAAM,WAAA,GAAc,aAAA,CAAc,gBAAgB,CAAA,IAAK,gBAAA;AACvD,EAAA,OAAO,CAAA,EAAG,WAAW,CAAA,CAAA,EAAI,WAAW,CAAA,CAAA;AACtC;;;;"}
package/package.json ADDED
@@ -0,0 +1,92 @@
1
+ {
2
+ "name": "@massdriver/backstage-plugin",
3
+ "version": "1.0.0",
4
+ "license": "Apache-2.0",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/massdriver-cloud/massdriver-backstage",
8
+ "directory": "plugins/massdriver"
9
+ },
10
+ "main": "dist/index.esm.js",
11
+ "types": "dist/index.d.ts",
12
+ "publishConfig": {
13
+ "access": "public",
14
+ "main": "dist/index.esm.js",
15
+ "types": "dist/index.d.ts"
16
+ },
17
+ "backstage": {
18
+ "role": "frontend-plugin",
19
+ "pluginId": "massdriver",
20
+ "pluginPackages": [
21
+ "@massdriver/backstage-plugin",
22
+ "@massdriver/backstage-plugin-backend",
23
+ "@massdriver/backstage-plugin-common"
24
+ ],
25
+ "features": {
26
+ ".": "@backstage/FrontendPlugin"
27
+ }
28
+ },
29
+ "sideEffects": false,
30
+ "scripts": {
31
+ "start": "backstage-cli package start",
32
+ "build": "backstage-cli package build",
33
+ "lint": "backstage-cli package lint",
34
+ "test": "backstage-cli package test",
35
+ "clean": "backstage-cli package clean",
36
+ "prepack": "backstage-cli package prepack",
37
+ "postpack": "backstage-cli package postpack"
38
+ },
39
+ "dependencies": {
40
+ "@backstage/catalog-model": "^1.9.0",
41
+ "@backstage/core-components": "^0.18.11",
42
+ "@backstage/frontend-plugin-api": "^0.17.2",
43
+ "@backstage/plugin-catalog-react": "^3.1.0",
44
+ "@backstage/theme": "^0.7.3",
45
+ "@backstage/ui": "^0.16.0",
46
+ "@emotion/cache": "^11.11.0",
47
+ "@emotion/react": "^11.11.0",
48
+ "@emotion/styled": "^11.11.0",
49
+ "@massdriver/backstage-plugin-common": "^1.0.0",
50
+ "@massdriver/forms": "^2.0.1",
51
+ "@massdriver/ui": "^1.0.1",
52
+ "@material-ui/core": "^4.12.2",
53
+ "@material-ui/icons": "^4.9.1",
54
+ "@mui/icons-material": "^5.14.18",
55
+ "@mui/lab": "^5.0.0-alpha.153",
56
+ "@mui/material": "^5.14.18",
57
+ "@rjsf/core": "^5.7.3",
58
+ "@rjsf/mui": "^5.7.3",
59
+ "@rjsf/utils": "^5.8.2",
60
+ "@rjsf/validator-ajv8": "^5.8.2",
61
+ "@xyflow/react": "^12.0.0",
62
+ "graphql": "^16.8.1",
63
+ "html-to-image": "^1.11.13",
64
+ "react-use": "^17.2.4"
65
+ },
66
+ "peerDependencies": {
67
+ "react": "^16.13.1 || ^17.0.0 || ^18.0.0",
68
+ "react-router-dom": "^6.3.0"
69
+ },
70
+ "devDependencies": {
71
+ "@backstage/cli": "^0.36.3",
72
+ "@backstage/frontend-defaults": "^0.5.3",
73
+ "@backstage/frontend-dev-utils": "^0.1.3",
74
+ "@backstage/frontend-test-utils": "^0.6.1",
75
+ "@testing-library/jest-dom": "^6.0.0",
76
+ "@testing-library/react": "^14.0.0",
77
+ "@testing-library/user-event": "^14.0.0",
78
+ "msw": "^1.0.0",
79
+ "react": "^16.13.1 || ^17.0.0 || ^18.0.0"
80
+ },
81
+ "files": [
82
+ "dist"
83
+ ],
84
+ "typesVersions": {
85
+ "*": {
86
+ "package.json": [
87
+ "package.json"
88
+ ]
89
+ }
90
+ },
91
+ "module": "./dist/index.esm.js"
92
+ }