@burdenoff/microfe-devportal 2026.1107.3 → 2026.1108.2

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 (1400) hide show
  1. package/dist/__tests__/utils/renderWithProviders.d.ts +0 -2
  2. package/dist/_virtual/_rolldown/runtime.js +4 -5
  3. package/dist/dev/main.d.ts +0 -1
  4. package/dist/devportal/AdminDevportalRoot.d.ts +0 -2
  5. package/dist/devportal/AdminDevportalRoot.js +9 -6
  6. package/dist/devportal/AdminDevportalRoot.js.map +1 -1
  7. package/dist/devportal/AdminDevportalRoutes.d.ts +1 -2
  8. package/dist/devportal/AdminDevportalRoutes.js +1 -2
  9. package/dist/devportal/AdminDevportalRoutes.js.map +1 -1
  10. package/dist/devportal/DevportalRoot.d.ts +0 -2
  11. package/dist/devportal/DevportalRoot.js +13 -10
  12. package/dist/devportal/DevportalRoot.js.map +1 -1
  13. package/dist/devportal/DevportalRoutes.d.ts +1 -2
  14. package/dist/devportal/DevportalRoutes.js +46 -40
  15. package/dist/devportal/DevportalRoutes.js.map +1 -1
  16. package/dist/devportal/components/AppCard.d.ts +0 -2
  17. package/dist/devportal/components/AppCard.js +21 -22
  18. package/dist/devportal/components/AppCard.js.map +1 -1
  19. package/dist/devportal/components/ConfirmDialog.d.ts +0 -2
  20. package/dist/devportal/components/ConfirmDialog.js +9 -10
  21. package/dist/devportal/components/ConfirmDialog.js.map +1 -1
  22. package/dist/devportal/components/DataTable.d.ts +1 -3
  23. package/dist/devportal/components/DataTable.js +20 -21
  24. package/dist/devportal/components/DataTable.js.map +1 -1
  25. package/dist/devportal/components/EmptyState.d.ts +0 -2
  26. package/dist/devportal/components/EmptyState.js +1 -2
  27. package/dist/devportal/components/EmptyState.js.map +1 -1
  28. package/dist/devportal/components/FeatureFlaggedRoute.d.ts +0 -2
  29. package/dist/devportal/components/FeatureFlaggedRoute.js +1 -2
  30. package/dist/devportal/components/FeatureFlaggedRoute.js.map +1 -1
  31. package/dist/devportal/components/FormField.d.ts +0 -2
  32. package/dist/devportal/components/FormField.js +23 -24
  33. package/dist/devportal/components/FormField.js.map +1 -1
  34. package/dist/devportal/components/GrantDelegationModal.d.ts +0 -2
  35. package/dist/devportal/components/GrantDelegationModal.js +1 -2
  36. package/dist/devportal/components/GrantDelegationModal.js.map +1 -1
  37. package/dist/devportal/components/ImageUploadField.d.ts +0 -2
  38. package/dist/devportal/components/ImageUploadField.js +1 -2
  39. package/dist/devportal/components/ImageUploadField.js.map +1 -1
  40. package/dist/devportal/components/LoadingState.d.ts +0 -2
  41. package/dist/devportal/components/LoadingState.js +6 -7
  42. package/dist/devportal/components/LoadingState.js.map +1 -1
  43. package/dist/devportal/components/ManifestViewer.d.ts +0 -2
  44. package/dist/devportal/components/ManifestViewer.js +1 -2
  45. package/dist/devportal/components/ManifestViewer.js.map +1 -1
  46. package/dist/devportal/components/MarkdownEditor.d.ts +0 -2
  47. package/dist/devportal/components/MarkdownEditor.js +1 -2
  48. package/dist/devportal/components/MarkdownEditor.js.map +1 -1
  49. package/dist/devportal/components/MultiSelectCombobox.d.ts +1 -2
  50. package/dist/devportal/components/MultiSelectCombobox.js +1 -2
  51. package/dist/devportal/components/MultiSelectCombobox.js.map +1 -1
  52. package/dist/devportal/components/NodeSmokePanel.d.ts +0 -2
  53. package/dist/devportal/components/NodeSmokePanel.js +17 -18
  54. package/dist/devportal/components/NodeSmokePanel.js.map +1 -1
  55. package/dist/devportal/components/OnboardingChecklist.d.ts +0 -2
  56. package/dist/devportal/components/OnboardingChecklist.js +15 -16
  57. package/dist/devportal/components/OnboardingChecklist.js.map +1 -1
  58. package/dist/devportal/components/PackageValidationPanel.d.ts +0 -2
  59. package/dist/devportal/components/PackageValidationPanel.js +12 -13
  60. package/dist/devportal/components/PackageValidationPanel.js.map +1 -1
  61. package/dist/devportal/components/PageLayout.d.ts +0 -2
  62. package/dist/devportal/components/PageLayout.js +16 -17
  63. package/dist/devportal/components/PageLayout.js.map +1 -1
  64. package/dist/devportal/components/PermissionGuard.d.ts +0 -2
  65. package/dist/devportal/components/PermissionGuard.js +5 -6
  66. package/dist/devportal/components/PermissionGuard.js.map +1 -1
  67. package/dist/devportal/components/RegisterPickupLocationModal.d.ts +0 -2
  68. package/dist/devportal/components/RegisterPickupLocationModal.js +13 -14
  69. package/dist/devportal/components/RegisterPickupLocationModal.js.map +1 -1
  70. package/dist/devportal/components/ReportOrderIssueModal.d.ts +0 -2
  71. package/dist/devportal/components/ReportOrderIssueModal.js +1 -2
  72. package/dist/devportal/components/ReportOrderIssueModal.js.map +1 -1
  73. package/dist/devportal/components/SecretDisplay.d.ts +0 -2
  74. package/dist/devportal/components/SecretDisplay.js +8 -9
  75. package/dist/devportal/components/SecretDisplay.js.map +1 -1
  76. package/dist/devportal/components/SectionNav.d.ts +0 -2
  77. package/dist/devportal/components/SectionNav.js +11 -12
  78. package/dist/devportal/components/SectionNav.js.map +1 -1
  79. package/dist/devportal/components/SelectionCheckbox.d.ts +1 -2
  80. package/dist/devportal/components/SelectionCheckbox.js +1 -2
  81. package/dist/devportal/components/SelectionCheckbox.js.map +1 -1
  82. package/dist/devportal/components/StatCard.d.ts +0 -2
  83. package/dist/devportal/components/StatCard.js +1 -2
  84. package/dist/devportal/components/StatCard.js.map +1 -1
  85. package/dist/devportal/components/StatusBadge.d.ts +0 -2
  86. package/dist/devportal/components/StatusBadge.js +18 -19
  87. package/dist/devportal/components/StatusBadge.js.map +1 -1
  88. package/dist/devportal/components/TelemetryErrorBoundary.d.ts +0 -2
  89. package/dist/devportal/components/TelemetryErrorBoundary.js +1 -2
  90. package/dist/devportal/components/TelemetryErrorBoundary.js.map +1 -1
  91. package/dist/devportal/components/index.d.ts +0 -1
  92. package/dist/devportal/components/index.js +22 -21
  93. package/dist/devportal/constants/appCategories.d.ts +0 -1
  94. package/dist/devportal/constants/appCategories.js +1 -2
  95. package/dist/devportal/constants/appCategories.js.map +1 -1
  96. package/dist/devportal/constants/developerLinks.d.ts +0 -1
  97. package/dist/devportal/constants/developerLinks.js +23 -23
  98. package/dist/devportal/constants/developerLinks.js.map +1 -1
  99. package/dist/devportal/constants/permissions.d.ts +0 -1
  100. package/dist/devportal/constants/permissions.js +1 -2
  101. package/dist/devportal/constants/permissions.js.map +1 -1
  102. package/dist/devportal/events/index.d.ts +0 -1
  103. package/dist/devportal/events/index.js +1 -2
  104. package/dist/devportal/events/index.js.map +1 -1
  105. package/dist/devportal/hooks/DevPortalProvider.d.ts +1 -3
  106. package/dist/devportal/hooks/DevPortalProvider.js +2 -3
  107. package/dist/devportal/hooks/DevPortalProvider.js.map +1 -1
  108. package/dist/devportal/hooks/index.d.ts +0 -1
  109. package/dist/devportal/hooks/index.js +6 -5
  110. package/dist/devportal/hooks/useCarrierPickupLocations.d.ts +0 -1
  111. package/dist/devportal/hooks/useCarrierPickupLocations.js +1 -2
  112. package/dist/devportal/hooks/useCarrierPickupLocations.js.map +1 -1
  113. package/dist/devportal/hooks/useGraphQL.d.ts +0 -2
  114. package/dist/devportal/hooks/useGraphQL.js +42 -53
  115. package/dist/devportal/hooks/useGraphQL.js.map +1 -1
  116. package/dist/devportal/hooks/useIsSellerSection.d.ts +0 -1
  117. package/dist/devportal/hooks/useIsSellerSection.js +1 -2
  118. package/dist/devportal/hooks/useIsSellerSection.js.map +1 -1
  119. package/dist/devportal/hooks/useOrganizationPickupAddresses.d.ts +0 -1
  120. package/dist/devportal/hooks/useOrganizationPickupAddresses.js +3 -8
  121. package/dist/devportal/hooks/useOrganizationPickupAddresses.js.map +1 -1
  122. package/dist/devportal/hooks/usePackageUpload.d.ts +0 -1
  123. package/dist/devportal/hooks/usePackageUpload.js +4 -4
  124. package/dist/devportal/hooks/usePackageUpload.js.map +1 -1
  125. package/dist/devportal/hooks/usePermission.d.ts +0 -2
  126. package/dist/devportal/hooks/usePermission.js +2 -3
  127. package/dist/devportal/hooks/usePermission.js.map +1 -1
  128. package/dist/devportal/hooks/useProducts.d.ts +0 -1
  129. package/dist/devportal/hooks/useProducts.js +1 -2
  130. package/dist/devportal/hooks/useProducts.js.map +1 -1
  131. package/dist/devportal/hooks/useSellerOrganization.d.ts +0 -1
  132. package/dist/devportal/hooks/useSellerOrganization.js +1 -2
  133. package/dist/devportal/hooks/useSellerOrganization.js.map +1 -1
  134. package/dist/devportal/index.d.ts +0 -1
  135. package/dist/devportal/index.js +13 -12
  136. package/dist/devportal/pages/AdminOrganizationVerificationPage.d.ts +0 -2
  137. package/dist/devportal/pages/AdminOrganizationVerificationPage.js +13 -13
  138. package/dist/devportal/pages/AdminOrganizationVerificationPage.js.map +1 -1
  139. package/dist/devportal/pages/AdminReviewPage.d.ts +0 -2
  140. package/dist/devportal/pages/AdminReviewPage.js +134 -135
  141. package/dist/devportal/pages/AdminReviewPage.js.map +1 -1
  142. package/dist/devportal/pages/AnalyticsDashboardPage.d.ts +0 -2
  143. package/dist/devportal/pages/AnalyticsDashboardPage.js +66 -67
  144. package/dist/devportal/pages/AnalyticsDashboardPage.js.map +1 -1
  145. package/dist/devportal/pages/ApiKeysPage.d.ts +0 -2
  146. package/dist/devportal/pages/ApiKeysPage.js +127 -128
  147. package/dist/devportal/pages/ApiKeysPage.js.map +1 -1
  148. package/dist/devportal/pages/AppLogsPage.d.ts +0 -2
  149. package/dist/devportal/pages/AppLogsPage.js +18 -19
  150. package/dist/devportal/pages/AppLogsPage.js.map +1 -1
  151. package/dist/devportal/pages/ApplicationDetailPage.d.ts +0 -2
  152. package/dist/devportal/pages/ApplicationDetailPage.js +779 -778
  153. package/dist/devportal/pages/ApplicationDetailPage.js.map +1 -1
  154. package/dist/devportal/pages/ApplicationVersionsPage.d.ts +0 -2
  155. package/dist/devportal/pages/ApplicationVersionsPage.js +482 -483
  156. package/dist/devportal/pages/ApplicationVersionsPage.js.map +1 -1
  157. package/dist/devportal/pages/ApplicationsPage.d.ts +0 -2
  158. package/dist/devportal/pages/ApplicationsPage.js +35 -36
  159. package/dist/devportal/pages/ApplicationsPage.js.map +1 -1
  160. package/dist/devportal/pages/CreateApiKeyPage.d.ts +0 -2
  161. package/dist/devportal/pages/CreateApiKeyPage.js +39 -39
  162. package/dist/devportal/pages/CreateApiKeyPage.js.map +1 -1
  163. package/dist/devportal/pages/CreateApplicationPage.d.ts +0 -2
  164. package/dist/devportal/pages/CreateApplicationPage.js +136 -137
  165. package/dist/devportal/pages/CreateApplicationPage.js.map +1 -1
  166. package/dist/devportal/pages/CreateOAuthClientPage.d.ts +0 -2
  167. package/dist/devportal/pages/CreateOAuthClientPage.js +25 -24
  168. package/dist/devportal/pages/CreateOAuthClientPage.js.map +1 -1
  169. package/dist/devportal/pages/CreateOrganizationPage.d.ts +0 -2
  170. package/dist/devportal/pages/CreateOrganizationPage.js +32 -39
  171. package/dist/devportal/pages/CreateOrganizationPage.js.map +1 -1
  172. package/dist/devportal/pages/CreatePhysicalItemPage.d.ts +0 -2
  173. package/dist/devportal/pages/CreatePhysicalItemPage.js +102 -103
  174. package/dist/devportal/pages/CreatePhysicalItemPage.js.map +1 -1
  175. package/dist/devportal/pages/CreateWebhookPage.d.ts +0 -2
  176. package/dist/devportal/pages/CreateWebhookPage.js +31 -32
  177. package/dist/devportal/pages/CreateWebhookPage.js.map +1 -1
  178. package/dist/devportal/pages/DashboardPage.d.ts +0 -2
  179. package/dist/devportal/pages/DashboardPage.js +21 -22
  180. package/dist/devportal/pages/DashboardPage.js.map +1 -1
  181. package/dist/devportal/pages/DelegationsPage.d.ts +0 -2
  182. package/dist/devportal/pages/DelegationsPage.js +83 -84
  183. package/dist/devportal/pages/DelegationsPage.js.map +1 -1
  184. package/dist/devportal/pages/DocumentationPage.d.ts +0 -2
  185. package/dist/devportal/pages/DocumentationPage.js +1 -2
  186. package/dist/devportal/pages/DocumentationPage.js.map +1 -1
  187. package/dist/devportal/pages/EditApplicationPage.d.ts +0 -2
  188. package/dist/devportal/pages/EditApplicationPage.js +69 -70
  189. package/dist/devportal/pages/EditApplicationPage.js.map +1 -1
  190. package/dist/devportal/pages/EditPhysicalItemPage.d.ts +0 -2
  191. package/dist/devportal/pages/EditPhysicalItemPage.js +334 -335
  192. package/dist/devportal/pages/EditPhysicalItemPage.js.map +1 -1
  193. package/dist/devportal/pages/InvitationDecisionPage.d.ts +0 -2
  194. package/dist/devportal/pages/InvitationDecisionPage.js +16 -17
  195. package/dist/devportal/pages/InvitationDecisionPage.js.map +1 -1
  196. package/dist/devportal/pages/ListingPreviewPage.d.ts +0 -2
  197. package/dist/devportal/pages/ListingPreviewPage.js +14 -15
  198. package/dist/devportal/pages/ListingPreviewPage.js.map +1 -1
  199. package/dist/devportal/pages/NodeLifecyclePage.d.ts +0 -2
  200. package/dist/devportal/pages/NodeLifecyclePage.js +216 -221
  201. package/dist/devportal/pages/NodeLifecyclePage.js.map +1 -1
  202. package/dist/devportal/pages/OAuthCallbackPage.d.ts +0 -2
  203. package/dist/devportal/pages/OAuthCallbackPage.js +4 -5
  204. package/dist/devportal/pages/OAuthCallbackPage.js.map +1 -1
  205. package/dist/devportal/pages/OAuthClientDetailPage.d.ts +0 -2
  206. package/dist/devportal/pages/OAuthClientDetailPage.js +17 -16
  207. package/dist/devportal/pages/OAuthClientDetailPage.js.map +1 -1
  208. package/dist/devportal/pages/OAuthClientsPage.d.ts +0 -2
  209. package/dist/devportal/pages/OAuthClientsPage.js +18 -19
  210. package/dist/devportal/pages/OAuthClientsPage.js.map +1 -1
  211. package/dist/devportal/pages/OrganizationDetailPage.d.ts +0 -2
  212. package/dist/devportal/pages/OrganizationDetailPage.js +444 -450
  213. package/dist/devportal/pages/OrganizationDetailPage.js.map +1 -1
  214. package/dist/devportal/pages/OrganizationMembersPage.d.ts +0 -2
  215. package/dist/devportal/pages/OrganizationMembersPage.js +240 -241
  216. package/dist/devportal/pages/OrganizationMembersPage.js.map +1 -1
  217. package/dist/devportal/pages/OrganizationsPage.d.ts +0 -2
  218. package/dist/devportal/pages/OrganizationsPage.js +34 -35
  219. package/dist/devportal/pages/OrganizationsPage.js.map +1 -1
  220. package/dist/devportal/pages/PublishPage.d.ts +0 -2
  221. package/dist/devportal/pages/PublishPage.js +90 -91
  222. package/dist/devportal/pages/PublishPage.js.map +1 -1
  223. package/dist/devportal/pages/PublisherPayoutsPage.d.ts +19 -0
  224. package/dist/devportal/pages/PublisherPayoutsPage.js +650 -0
  225. package/dist/devportal/pages/PublisherPayoutsPage.js.map +1 -0
  226. package/dist/devportal/pages/PublisherProfilePage.d.ts +0 -2
  227. package/dist/devportal/pages/PublisherProfilePage.js +175 -163
  228. package/dist/devportal/pages/PublisherProfilePage.js.map +1 -1
  229. package/dist/devportal/pages/ResourcesPage.d.ts +0 -2
  230. package/dist/devportal/pages/ResourcesPage.js +17 -18
  231. package/dist/devportal/pages/ResourcesPage.js.map +1 -1
  232. package/dist/devportal/pages/RevenueDashboardPage.d.ts +0 -2
  233. package/dist/devportal/pages/RevenueDashboardPage.js +308 -308
  234. package/dist/devportal/pages/RevenueDashboardPage.js.map +1 -1
  235. package/dist/devportal/pages/RevenueRedirectPage.d.ts +0 -2
  236. package/dist/devportal/pages/SellerDashboardPage.d.ts +0 -2
  237. package/dist/devportal/pages/SellerDashboardPage.js +14 -15
  238. package/dist/devportal/pages/SellerDashboardPage.js.map +1 -1
  239. package/dist/devportal/pages/SellerItemsPage.d.ts +0 -2
  240. package/dist/devportal/pages/SellerItemsPage.js +8 -9
  241. package/dist/devportal/pages/SellerItemsPage.js.map +1 -1
  242. package/dist/devportal/pages/SellerOrdersPage.d.ts +0 -2
  243. package/dist/devportal/pages/SellerOrdersPage.js +10 -14
  244. package/dist/devportal/pages/SellerOrdersPage.js.map +1 -1
  245. package/dist/devportal/pages/SettingsPage.d.ts +0 -2
  246. package/dist/devportal/pages/SettingsPage.js +20 -21
  247. package/dist/devportal/pages/SettingsPage.js.map +1 -1
  248. package/dist/devportal/pages/SetupPage.d.ts +0 -2
  249. package/dist/devportal/pages/SetupPage.js +276 -277
  250. package/dist/devportal/pages/SetupPage.js.map +1 -1
  251. package/dist/devportal/pages/StoreSubmissionPage.d.ts +0 -2
  252. package/dist/devportal/pages/StoreSubmissionPage.js +4 -5
  253. package/dist/devportal/pages/StoreSubmissionPage.js.map +1 -1
  254. package/dist/devportal/pages/WebhookDetailPage.d.ts +0 -2
  255. package/dist/devportal/pages/WebhookDetailPage.js +62 -67
  256. package/dist/devportal/pages/WebhookDetailPage.js.map +1 -1
  257. package/dist/devportal/pages/WebhooksPage.d.ts +0 -2
  258. package/dist/devportal/pages/WebhooksPage.js +130 -131
  259. package/dist/devportal/pages/WebhooksPage.js.map +1 -1
  260. package/dist/devportal/providers/DevportalProvider.d.ts +0 -2
  261. package/dist/devportal/providers/DevportalProvider.js +2 -3
  262. package/dist/devportal/providers/DevportalProvider.js.map +1 -1
  263. package/dist/devportal/store/devportalStore.d.ts +0 -2
  264. package/dist/devportal/store/devportalStore.js +1 -2
  265. package/dist/devportal/store/devportalStore.js.map +1 -1
  266. package/dist/devportal/types/index.d.ts +0 -2
  267. package/dist/devportal/types/index.js +1 -2
  268. package/dist/devportal/types/index.js.map +1 -1
  269. package/dist/devportal/utils/cn.d.ts +0 -2
  270. package/dist/devportal/utils/cn.js +2 -3
  271. package/dist/devportal/utils/cn.js.map +1 -1
  272. package/dist/devportal/utils/constants.d.ts +0 -1
  273. package/dist/devportal/utils/constants.js +1 -2
  274. package/dist/devportal/utils/constants.js.map +1 -1
  275. package/dist/devportal/utils/currency.d.ts +0 -1
  276. package/dist/devportal/utils/currency.js +1 -2
  277. package/dist/devportal/utils/currency.js.map +1 -1
  278. package/dist/devportal/utils/developerOnboarding.d.ts +0 -1
  279. package/dist/devportal/utils/developerOnboarding.js +4 -5
  280. package/dist/devportal/utils/developerOnboarding.js.map +1 -1
  281. package/dist/devportal/utils/graphqlEndpoint.d.ts +0 -1
  282. package/dist/devportal/utils/graphqlEndpoint.js +1 -2
  283. package/dist/devportal/utils/graphqlEndpoint.js.map +1 -1
  284. package/dist/devportal/utils/i18n.d.ts +0 -1
  285. package/dist/devportal/utils/i18n.js +1 -2
  286. package/dist/devportal/utils/i18n.js.map +1 -1
  287. package/dist/devportal/utils/nodeLifecycle.d.ts +0 -2
  288. package/dist/devportal/utils/nodeLifecycle.js +6 -7
  289. package/dist/devportal/utils/nodeLifecycle.js.map +1 -1
  290. package/dist/devportal/utils/publisherPayouts.d.ts +136 -0
  291. package/dist/devportal/utils/publisherPayouts.js +166 -0
  292. package/dist/devportal/utils/publisherPayouts.js.map +1 -0
  293. package/dist/devportal/utils/recaptcha.d.ts +0 -1
  294. package/dist/devportal/utils/recaptcha.js +1 -2
  295. package/dist/devportal/utils/recaptcha.js.map +1 -1
  296. package/dist/devportal/utils/submitForReview.d.ts +0 -1
  297. package/dist/devportal/utils/submitForReview.js +15 -14
  298. package/dist/devportal/utils/submitForReview.js.map +1 -1
  299. package/dist/devportal/utils/uploadErrors.d.ts +0 -1
  300. package/dist/devportal/utils/uploadErrors.js +30 -30
  301. package/dist/devportal/utils/uploadErrors.js.map +1 -1
  302. package/dist/generated/global-operations.d.ts +2614 -2317
  303. package/dist/generated/global-operations.js +412 -272
  304. package/dist/generated/global-operations.js.map +1 -1
  305. package/dist/generated/global-types.d.ts +2288 -339
  306. package/dist/generated/global-types.js +4 -3
  307. package/dist/generated/global-types.js.map +1 -1
  308. package/dist/generated/wspace-operations.d.ts +31 -8
  309. package/dist/generated/wspace-operations.js +2 -3
  310. package/dist/generated/wspace-operations.js.map +1 -1
  311. package/dist/generated/wspace-types.d.ts +4 -24
  312. package/dist/index.d.ts +0 -1
  313. package/dist/index.js +1 -1
  314. package/dist/node_modules/@apollo/client/errors/CombinedGraphQLErrors.js +1 -2
  315. package/dist/node_modules/@apollo/client/errors/CombinedGraphQLErrors.js.map +1 -1
  316. package/dist/node_modules/@apollo/client/errors/ServerError.js +1 -2
  317. package/dist/node_modules/@apollo/client/errors/ServerError.js.map +1 -1
  318. package/dist/node_modules/@apollo/client/errors/utils.js +1 -2
  319. package/dist/node_modules/@apollo/client/errors/utils.js.map +1 -1
  320. package/dist/node_modules/@apollo/client/link/core/ApolloLink.js +7 -8
  321. package/dist/node_modules/@apollo/client/link/core/ApolloLink.js.map +1 -1
  322. package/dist/node_modules/@apollo/client/link/subscriptions/index.js +16 -17
  323. package/dist/node_modules/@apollo/client/link/subscriptions/index.js.map +1 -1
  324. package/dist/node_modules/@apollo/client/link/utils/createOperation.js +5 -6
  325. package/dist/node_modules/@apollo/client/link/utils/createOperation.js.map +1 -1
  326. package/dist/node_modules/@apollo/client/utilities/caching/sizes.js +0 -1
  327. package/dist/node_modules/@apollo/client/utilities/caching/sizes.js.map +1 -1
  328. package/dist/node_modules/@apollo/client/utilities/graphql/print.js +4 -5
  329. package/dist/node_modules/@apollo/client/utilities/graphql/print.js.map +1 -1
  330. package/dist/node_modules/@apollo/client/utilities/internal/caches.js +1 -2
  331. package/dist/node_modules/@apollo/client/utilities/internal/caches.js.map +1 -1
  332. package/dist/node_modules/@apollo/client/utilities/internal/checkDocument.js +1 -2
  333. package/dist/node_modules/@apollo/client/utilities/internal/checkDocument.js.map +1 -1
  334. package/dist/node_modules/@apollo/client/utilities/internal/getMainDefinition.js +2 -3
  335. package/dist/node_modules/@apollo/client/utilities/internal/getMainDefinition.js.map +1 -1
  336. package/dist/node_modules/@apollo/client/utilities/internal/getMemoryInternals.js +1 -2
  337. package/dist/node_modules/@apollo/client/utilities/internal/getMemoryInternals.js.map +1 -1
  338. package/dist/node_modules/@apollo/client/utilities/internal/getOperationDefinition.js +1 -2
  339. package/dist/node_modules/@apollo/client/utilities/internal/getOperationDefinition.js.map +1 -1
  340. package/dist/node_modules/@apollo/client/utilities/internal/getOperationName.js +1 -2
  341. package/dist/node_modules/@apollo/client/utilities/internal/getOperationName.js.map +1 -1
  342. package/dist/node_modules/@apollo/client/utilities/internal/globals/global.js +1 -2
  343. package/dist/node_modules/@apollo/client/utilities/internal/globals/global.js.map +1 -1
  344. package/dist/node_modules/@apollo/client/utilities/internal/globals/maybe.js +1 -2
  345. package/dist/node_modules/@apollo/client/utilities/internal/globals/maybe.js.map +1 -1
  346. package/dist/node_modules/@apollo/client/utilities/internal/isNonNullObject.js +1 -2
  347. package/dist/node_modules/@apollo/client/utilities/internal/isNonNullObject.js.map +1 -1
  348. package/dist/node_modules/@apollo/client/utilities/internal/makeUniqueId.js +1 -2
  349. package/dist/node_modules/@apollo/client/utilities/internal/makeUniqueId.js.map +1 -1
  350. package/dist/node_modules/@apollo/client/utilities/internal/memoize.js +1 -2
  351. package/dist/node_modules/@apollo/client/utilities/internal/memoize.js.map +1 -1
  352. package/dist/node_modules/@apollo/client/utilities/internal/stringifyForDisplay.js +1 -2
  353. package/dist/node_modules/@apollo/client/utilities/internal/stringifyForDisplay.js.map +1 -1
  354. package/dist/node_modules/@apollo/client/utilities/invariant/index.js +2 -3
  355. package/dist/node_modules/@apollo/client/utilities/invariant/index.js.map +1 -1
  356. package/dist/node_modules/@apollo/client/version.js +2 -3
  357. package/dist/node_modules/@apollo/client/version.js.map +1 -1
  358. package/dist/node_modules/@wry/caches/lib/weak.js +1 -2
  359. package/dist/node_modules/@wry/caches/lib/weak.js.map +1 -1
  360. package/dist/node_modules/@wry/trie/lib/index.js +2 -3
  361. package/dist/node_modules/@wry/trie/lib/index.js.map +1 -1
  362. package/dist/node_modules/clsx/dist/clsx.js +8 -7
  363. package/dist/node_modules/clsx/dist/clsx.js.map +1 -1
  364. package/dist/node_modules/d3-array/dist/d3-array.js +204 -0
  365. package/dist/node_modules/d3-array/dist/d3-array.js.map +1 -0
  366. package/dist/node_modules/d3-color/dist/d3-color.js +388 -0
  367. package/dist/node_modules/d3-color/dist/d3-color.js.map +1 -0
  368. package/dist/node_modules/d3-format/dist/d3-format.js +186 -0
  369. package/dist/node_modules/d3-format/dist/d3-format.js.map +1 -0
  370. package/dist/node_modules/d3-interpolate/dist/d3-interpolate.js +185 -0
  371. package/dist/node_modules/d3-interpolate/dist/d3-interpolate.js.map +1 -0
  372. package/dist/node_modules/d3-path/{src/path.js → dist/d3-path.js} +39 -14
  373. package/dist/node_modules/d3-path/dist/d3-path.js.map +1 -0
  374. package/dist/node_modules/d3-scale/dist/d3-scale.js +622 -0
  375. package/dist/node_modules/d3-scale/dist/d3-scale.js.map +1 -0
  376. package/dist/node_modules/d3-shape/dist/d3-shape.js +901 -0
  377. package/dist/node_modules/d3-shape/dist/d3-shape.js.map +1 -0
  378. package/dist/node_modules/d3-time/dist/d3-time.js +241 -0
  379. package/dist/node_modules/d3-time/dist/d3-time.js.map +1 -0
  380. package/dist/node_modules/d3-time-format/{src/locale.js → dist/d3-time-format.js} +229 -174
  381. package/dist/node_modules/d3-time-format/dist/d3-time-format.js.map +1 -0
  382. package/dist/node_modules/date-fns/_lib/addLeadingZeros.js +1 -2
  383. package/dist/node_modules/date-fns/_lib/addLeadingZeros.js.map +1 -1
  384. package/dist/node_modules/date-fns/_lib/defaultOptions.js +1 -2
  385. package/dist/node_modules/date-fns/_lib/defaultOptions.js.map +1 -1
  386. package/dist/node_modules/date-fns/_lib/format/formatters.js +29 -22
  387. package/dist/node_modules/date-fns/_lib/format/formatters.js.map +1 -1
  388. package/dist/node_modules/date-fns/_lib/format/lightFormatters.js +3 -4
  389. package/dist/node_modules/date-fns/_lib/format/lightFormatters.js.map +1 -1
  390. package/dist/node_modules/date-fns/_lib/format/longFormatters.js +2 -5
  391. package/dist/node_modules/date-fns/_lib/format/longFormatters.js.map +1 -1
  392. package/dist/node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.js +2 -3
  393. package/dist/node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.js.map +1 -1
  394. package/dist/node_modules/date-fns/_lib/protectedTokens.js +1 -2
  395. package/dist/node_modules/date-fns/_lib/protectedTokens.js.map +1 -1
  396. package/dist/node_modules/date-fns/constants.js +5 -5
  397. package/dist/node_modules/date-fns/constants.js.map +1 -1
  398. package/dist/node_modules/date-fns/constructFrom.js +2 -3
  399. package/dist/node_modules/date-fns/constructFrom.js.map +1 -1
  400. package/dist/node_modules/date-fns/differenceInCalendarDays.js +2 -3
  401. package/dist/node_modules/date-fns/differenceInCalendarDays.js.map +1 -1
  402. package/dist/node_modules/date-fns/format.js +15 -16
  403. package/dist/node_modules/date-fns/format.js.map +1 -1
  404. package/dist/node_modules/date-fns/getDayOfYear.js +7 -8
  405. package/dist/node_modules/date-fns/getDayOfYear.js.map +1 -1
  406. package/dist/node_modules/date-fns/getISOWeek.js +8 -9
  407. package/dist/node_modules/date-fns/getISOWeek.js.map +1 -1
  408. package/dist/node_modules/date-fns/getISOWeekYear.js +8 -9
  409. package/dist/node_modules/date-fns/getISOWeekYear.js.map +1 -1
  410. package/dist/node_modules/date-fns/getWeek.js +8 -9
  411. package/dist/node_modules/date-fns/getWeek.js.map +1 -1
  412. package/dist/node_modules/date-fns/getWeekYear.js +9 -10
  413. package/dist/node_modules/date-fns/getWeekYear.js.map +1 -1
  414. package/dist/node_modules/date-fns/isDate.js +2 -3
  415. package/dist/node_modules/date-fns/isDate.js.map +1 -1
  416. package/dist/node_modules/date-fns/isValid.js +6 -7
  417. package/dist/node_modules/date-fns/isValid.js.map +1 -1
  418. package/dist/node_modules/date-fns/locale/_lib/buildFormatLongFn.js +1 -2
  419. package/dist/node_modules/date-fns/locale/_lib/buildFormatLongFn.js.map +1 -1
  420. package/dist/node_modules/date-fns/locale/_lib/buildLocalizeFn.js +1 -2
  421. package/dist/node_modules/date-fns/locale/_lib/buildLocalizeFn.js.map +1 -1
  422. package/dist/node_modules/date-fns/locale/_lib/buildMatchFn.js +1 -2
  423. package/dist/node_modules/date-fns/locale/_lib/buildMatchFn.js.map +1 -1
  424. package/dist/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js +1 -2
  425. package/dist/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js.map +1 -1
  426. package/dist/node_modules/date-fns/locale/en-US/_lib/formatDistance.js +1 -2
  427. package/dist/node_modules/date-fns/locale/en-US/_lib/formatDistance.js.map +1 -1
  428. package/dist/node_modules/date-fns/locale/en-US/_lib/formatLong.js +0 -1
  429. package/dist/node_modules/date-fns/locale/en-US/_lib/formatLong.js.map +1 -1
  430. package/dist/node_modules/date-fns/locale/en-US/_lib/formatRelative.js +1 -2
  431. package/dist/node_modules/date-fns/locale/en-US/_lib/formatRelative.js.map +1 -1
  432. package/dist/node_modules/date-fns/locale/en-US/_lib/localize.js +0 -1
  433. package/dist/node_modules/date-fns/locale/en-US/_lib/localize.js.map +1 -1
  434. package/dist/node_modules/date-fns/locale/en-US/_lib/match.js +0 -1
  435. package/dist/node_modules/date-fns/locale/en-US/_lib/match.js.map +1 -1
  436. package/dist/node_modules/date-fns/locale/en-US.js +2 -3
  437. package/dist/node_modules/date-fns/locale/en-US.js.map +1 -1
  438. package/dist/node_modules/date-fns/startOfDay.js +2 -3
  439. package/dist/node_modules/date-fns/startOfDay.js.map +1 -1
  440. package/dist/node_modules/date-fns/startOfISOWeek.js +2 -3
  441. package/dist/node_modules/date-fns/startOfISOWeek.js.map +1 -1
  442. package/dist/node_modules/date-fns/startOfISOWeekYear.js +5 -6
  443. package/dist/node_modules/date-fns/startOfISOWeekYear.js.map +1 -1
  444. package/dist/node_modules/date-fns/startOfWeek.js +2 -3
  445. package/dist/node_modules/date-fns/startOfWeek.js.map +1 -1
  446. package/dist/node_modules/date-fns/startOfWeekYear.js +6 -7
  447. package/dist/node_modules/date-fns/startOfWeekYear.js.map +1 -1
  448. package/dist/node_modules/date-fns/startOfYear.js +3 -4
  449. package/dist/node_modules/date-fns/startOfYear.js.map +1 -1
  450. package/dist/node_modules/date-fns/toDate.js +2 -3
  451. package/dist/node_modules/date-fns/toDate.js.map +1 -1
  452. package/dist/node_modules/decimal.js-light/decimal.js +33 -30
  453. package/dist/node_modules/decimal.js-light/decimal.js.map +1 -1
  454. package/dist/node_modules/eventemitter3/index.js +2 -3
  455. package/dist/node_modules/eventemitter3/index.js.map +1 -1
  456. package/dist/node_modules/fast-equals/dist/es/index.js +109 -79
  457. package/dist/node_modules/fast-equals/dist/es/index.js.map +1 -1
  458. package/dist/node_modules/graphql-ws/dist/client.js +76 -69
  459. package/dist/node_modules/graphql-ws/dist/client.js.map +1 -1
  460. package/dist/node_modules/graphql-ws/dist/common-CGW11Fyb.js +2 -3
  461. package/dist/node_modules/graphql-ws/dist/common-CGW11Fyb.js.map +1 -1
  462. package/dist/node_modules/lodash/_DataView.js +4 -5
  463. package/dist/node_modules/lodash/_DataView.js.map +1 -1
  464. package/dist/node_modules/lodash/_Hash.js +1 -2
  465. package/dist/node_modules/lodash/_Hash.js.map +1 -1
  466. package/dist/node_modules/lodash/_ListCache.js +1 -2
  467. package/dist/node_modules/lodash/_ListCache.js.map +1 -1
  468. package/dist/node_modules/lodash/_Map.js +4 -5
  469. package/dist/node_modules/lodash/_Map.js.map +1 -1
  470. package/dist/node_modules/lodash/_MapCache.js +1 -2
  471. package/dist/node_modules/lodash/_MapCache.js.map +1 -1
  472. package/dist/node_modules/lodash/_Promise.js +4 -5
  473. package/dist/node_modules/lodash/_Promise.js.map +1 -1
  474. package/dist/node_modules/lodash/_Set.js +4 -5
  475. package/dist/node_modules/lodash/_Set.js.map +1 -1
  476. package/dist/node_modules/lodash/_SetCache.js +1 -2
  477. package/dist/node_modules/lodash/_SetCache.js.map +1 -1
  478. package/dist/node_modules/lodash/_Stack.js +3 -3
  479. package/dist/node_modules/lodash/_Stack.js.map +1 -1
  480. package/dist/node_modules/lodash/_Symbol.js +1 -2
  481. package/dist/node_modules/lodash/_Symbol.js.map +1 -1
  482. package/dist/node_modules/lodash/_Uint8Array.js +1 -2
  483. package/dist/node_modules/lodash/_Uint8Array.js.map +1 -1
  484. package/dist/node_modules/lodash/_WeakMap.js +4 -5
  485. package/dist/node_modules/lodash/_WeakMap.js.map +1 -1
  486. package/dist/node_modules/lodash/_apply.js +1 -2
  487. package/dist/node_modules/lodash/_apply.js.map +1 -1
  488. package/dist/node_modules/lodash/_arrayEvery.js +1 -2
  489. package/dist/node_modules/lodash/_arrayEvery.js.map +1 -1
  490. package/dist/node_modules/lodash/_arrayFilter.js +1 -2
  491. package/dist/node_modules/lodash/_arrayFilter.js.map +1 -1
  492. package/dist/node_modules/lodash/_arrayIncludes.js +1 -2
  493. package/dist/node_modules/lodash/_arrayIncludes.js.map +1 -1
  494. package/dist/node_modules/lodash/_arrayIncludesWith.js +1 -2
  495. package/dist/node_modules/lodash/_arrayIncludesWith.js.map +1 -1
  496. package/dist/node_modules/lodash/_arrayLikeKeys.js +5 -6
  497. package/dist/node_modules/lodash/_arrayLikeKeys.js.map +1 -1
  498. package/dist/node_modules/lodash/_arrayMap.js +1 -2
  499. package/dist/node_modules/lodash/_arrayMap.js.map +1 -1
  500. package/dist/node_modules/lodash/_arrayPush.js +1 -2
  501. package/dist/node_modules/lodash/_arrayPush.js.map +1 -1
  502. package/dist/node_modules/lodash/_arraySome.js +1 -2
  503. package/dist/node_modules/lodash/_arraySome.js.map +1 -1
  504. package/dist/node_modules/lodash/_asciiToArray.js +1 -2
  505. package/dist/node_modules/lodash/_asciiToArray.js.map +1 -1
  506. package/dist/node_modules/lodash/_assocIndexOf.js +1 -2
  507. package/dist/node_modules/lodash/_assocIndexOf.js.map +1 -1
  508. package/dist/node_modules/lodash/_baseAssignValue.js +1 -2
  509. package/dist/node_modules/lodash/_baseAssignValue.js.map +1 -1
  510. package/dist/node_modules/lodash/_baseEach.js +1 -2
  511. package/dist/node_modules/lodash/_baseEach.js.map +1 -1
  512. package/dist/node_modules/lodash/_baseEvery.js +1 -2
  513. package/dist/node_modules/lodash/_baseEvery.js.map +1 -1
  514. package/dist/node_modules/lodash/_baseExtremum.js +1 -2
  515. package/dist/node_modules/lodash/_baseExtremum.js.map +1 -1
  516. package/dist/node_modules/lodash/_baseFindIndex.js +1 -2
  517. package/dist/node_modules/lodash/_baseFindIndex.js.map +1 -1
  518. package/dist/node_modules/lodash/_baseFlatten.js +1 -2
  519. package/dist/node_modules/lodash/_baseFlatten.js.map +1 -1
  520. package/dist/node_modules/lodash/_baseFor.js +1 -2
  521. package/dist/node_modules/lodash/_baseFor.js.map +1 -1
  522. package/dist/node_modules/lodash/_baseForOwn.js +4 -5
  523. package/dist/node_modules/lodash/_baseForOwn.js.map +1 -1
  524. package/dist/node_modules/lodash/_baseGet.js +1 -2
  525. package/dist/node_modules/lodash/_baseGet.js.map +1 -1
  526. package/dist/node_modules/lodash/_baseGetAllKeys.js +4 -5
  527. package/dist/node_modules/lodash/_baseGetAllKeys.js.map +1 -1
  528. package/dist/node_modules/lodash/_baseGetTag.js +1 -2
  529. package/dist/node_modules/lodash/_baseGetTag.js.map +1 -1
  530. package/dist/node_modules/lodash/_baseGt.js +1 -2
  531. package/dist/node_modules/lodash/_baseGt.js.map +1 -1
  532. package/dist/node_modules/lodash/_baseHasIn.js +1 -2
  533. package/dist/node_modules/lodash/_baseHasIn.js.map +1 -1
  534. package/dist/node_modules/lodash/_baseIndexOf.js +1 -2
  535. package/dist/node_modules/lodash/_baseIndexOf.js.map +1 -1
  536. package/dist/node_modules/lodash/_baseIsArguments.js +1 -2
  537. package/dist/node_modules/lodash/_baseIsArguments.js.map +1 -1
  538. package/dist/node_modules/lodash/_baseIsEqual.js +4 -5
  539. package/dist/node_modules/lodash/_baseIsEqual.js.map +1 -1
  540. package/dist/node_modules/lodash/_baseIsEqualDeep.js +10 -11
  541. package/dist/node_modules/lodash/_baseIsEqualDeep.js.map +1 -1
  542. package/dist/node_modules/lodash/_baseIsMatch.js +1 -2
  543. package/dist/node_modules/lodash/_baseIsMatch.js.map +1 -1
  544. package/dist/node_modules/lodash/_baseIsNaN.js +1 -2
  545. package/dist/node_modules/lodash/_baseIsNaN.js.map +1 -1
  546. package/dist/node_modules/lodash/_baseIsNative.js +5 -6
  547. package/dist/node_modules/lodash/_baseIsNative.js.map +1 -1
  548. package/dist/node_modules/lodash/_baseIsTypedArray.js +4 -5
  549. package/dist/node_modules/lodash/_baseIsTypedArray.js.map +1 -1
  550. package/dist/node_modules/lodash/_baseIteratee.js +6 -7
  551. package/dist/node_modules/lodash/_baseIteratee.js.map +1 -1
  552. package/dist/node_modules/lodash/_baseKeys.js +1 -2
  553. package/dist/node_modules/lodash/_baseKeys.js.map +1 -1
  554. package/dist/node_modules/lodash/_baseLt.js +1 -2
  555. package/dist/node_modules/lodash/_baseLt.js.map +1 -1
  556. package/dist/node_modules/lodash/_baseMap.js +4 -5
  557. package/dist/node_modules/lodash/_baseMap.js.map +1 -1
  558. package/dist/node_modules/lodash/_baseMatches.js +1 -2
  559. package/dist/node_modules/lodash/_baseMatches.js.map +1 -1
  560. package/dist/node_modules/lodash/_baseMatchesProperty.js +7 -8
  561. package/dist/node_modules/lodash/_baseMatchesProperty.js.map +1 -1
  562. package/dist/node_modules/lodash/_baseOrderBy.js +11 -12
  563. package/dist/node_modules/lodash/_baseOrderBy.js.map +1 -1
  564. package/dist/node_modules/lodash/_baseProperty.js +1 -2
  565. package/dist/node_modules/lodash/_baseProperty.js.map +1 -1
  566. package/dist/node_modules/lodash/_basePropertyDeep.js +1 -2
  567. package/dist/node_modules/lodash/_basePropertyDeep.js.map +1 -1
  568. package/dist/node_modules/lodash/_baseRange.js +1 -2
  569. package/dist/node_modules/lodash/_baseRange.js.map +1 -1
  570. package/dist/node_modules/lodash/_baseRest.js +1 -2
  571. package/dist/node_modules/lodash/_baseRest.js.map +1 -1
  572. package/dist/node_modules/lodash/_baseSetToString.js +5 -6
  573. package/dist/node_modules/lodash/_baseSetToString.js.map +1 -1
  574. package/dist/node_modules/lodash/_baseSlice.js +1 -2
  575. package/dist/node_modules/lodash/_baseSlice.js.map +1 -1
  576. package/dist/node_modules/lodash/_baseSome.js +1 -2
  577. package/dist/node_modules/lodash/_baseSome.js.map +1 -1
  578. package/dist/node_modules/lodash/_baseSortBy.js +1 -2
  579. package/dist/node_modules/lodash/_baseSortBy.js.map +1 -1
  580. package/dist/node_modules/lodash/_baseTimes.js +1 -2
  581. package/dist/node_modules/lodash/_baseTimes.js.map +1 -1
  582. package/dist/node_modules/lodash/_baseToString.js +6 -7
  583. package/dist/node_modules/lodash/_baseToString.js.map +1 -1
  584. package/dist/node_modules/lodash/_baseTrim.js +1 -2
  585. package/dist/node_modules/lodash/_baseTrim.js.map +1 -1
  586. package/dist/node_modules/lodash/_baseUnary.js +1 -2
  587. package/dist/node_modules/lodash/_baseUnary.js.map +1 -1
  588. package/dist/node_modules/lodash/_baseUniq.js +7 -8
  589. package/dist/node_modules/lodash/_baseUniq.js.map +1 -1
  590. package/dist/node_modules/lodash/_cacheHas.js +1 -2
  591. package/dist/node_modules/lodash/_cacheHas.js.map +1 -1
  592. package/dist/node_modules/lodash/_castPath.js +1 -2
  593. package/dist/node_modules/lodash/_castPath.js.map +1 -1
  594. package/dist/node_modules/lodash/_castSlice.js +1 -2
  595. package/dist/node_modules/lodash/_castSlice.js.map +1 -1
  596. package/dist/node_modules/lodash/_compareAscending.js +1 -2
  597. package/dist/node_modules/lodash/_compareAscending.js.map +1 -1
  598. package/dist/node_modules/lodash/_compareMultiple.js +1 -2
  599. package/dist/node_modules/lodash/_compareMultiple.js.map +1 -1
  600. package/dist/node_modules/lodash/_coreJsData.js +1 -2
  601. package/dist/node_modules/lodash/_coreJsData.js.map +1 -1
  602. package/dist/node_modules/lodash/_createBaseEach.js +1 -2
  603. package/dist/node_modules/lodash/_createBaseEach.js.map +1 -1
  604. package/dist/node_modules/lodash/_createBaseFor.js +1 -2
  605. package/dist/node_modules/lodash/_createBaseFor.js.map +1 -1
  606. package/dist/node_modules/lodash/_createCaseFirst.js +6 -7
  607. package/dist/node_modules/lodash/_createCaseFirst.js.map +1 -1
  608. package/dist/node_modules/lodash/_createFind.js +5 -6
  609. package/dist/node_modules/lodash/_createFind.js.map +1 -1
  610. package/dist/node_modules/lodash/_createRange.js +4 -5
  611. package/dist/node_modules/lodash/_createRange.js.map +1 -1
  612. package/dist/node_modules/lodash/_createSet.js +6 -7
  613. package/dist/node_modules/lodash/_createSet.js.map +1 -1
  614. package/dist/node_modules/lodash/_defineProperty.js +1 -2
  615. package/dist/node_modules/lodash/_defineProperty.js.map +1 -1
  616. package/dist/node_modules/lodash/_equalArrays.js +1 -2
  617. package/dist/node_modules/lodash/_equalArrays.js.map +1 -1
  618. package/dist/node_modules/lodash/_equalByTag.js +5 -6
  619. package/dist/node_modules/lodash/_equalByTag.js.map +1 -1
  620. package/dist/node_modules/lodash/_equalObjects.js +1 -2
  621. package/dist/node_modules/lodash/_equalObjects.js.map +1 -1
  622. package/dist/node_modules/lodash/_freeGlobal.js +1 -2
  623. package/dist/node_modules/lodash/_freeGlobal.js.map +1 -1
  624. package/dist/node_modules/lodash/_getAllKeys.js +1 -2
  625. package/dist/node_modules/lodash/_getAllKeys.js.map +1 -1
  626. package/dist/node_modules/lodash/_getMapData.js +1 -2
  627. package/dist/node_modules/lodash/_getMapData.js.map +1 -1
  628. package/dist/node_modules/lodash/_getMatchData.js +4 -5
  629. package/dist/node_modules/lodash/_getMatchData.js.map +1 -1
  630. package/dist/node_modules/lodash/_getNative.js +1 -2
  631. package/dist/node_modules/lodash/_getNative.js.map +1 -1
  632. package/dist/node_modules/lodash/_getPrototype.js +1 -2
  633. package/dist/node_modules/lodash/_getPrototype.js.map +1 -1
  634. package/dist/node_modules/lodash/_getRawTag.js +1 -2
  635. package/dist/node_modules/lodash/_getRawTag.js.map +1 -1
  636. package/dist/node_modules/lodash/_getSymbols.js +1 -2
  637. package/dist/node_modules/lodash/_getSymbols.js.map +1 -1
  638. package/dist/node_modules/lodash/_getTag.js +9 -10
  639. package/dist/node_modules/lodash/_getTag.js.map +1 -1
  640. package/dist/node_modules/lodash/_getValue.js +1 -2
  641. package/dist/node_modules/lodash/_getValue.js.map +1 -1
  642. package/dist/node_modules/lodash/_hasPath.js +8 -9
  643. package/dist/node_modules/lodash/_hasPath.js.map +1 -1
  644. package/dist/node_modules/lodash/_hasUnicode.js +1 -2
  645. package/dist/node_modules/lodash/_hasUnicode.js.map +1 -1
  646. package/dist/node_modules/lodash/_hashClear.js +1 -2
  647. package/dist/node_modules/lodash/_hashClear.js.map +1 -1
  648. package/dist/node_modules/lodash/_hashDelete.js +1 -2
  649. package/dist/node_modules/lodash/_hashDelete.js.map +1 -1
  650. package/dist/node_modules/lodash/_hashGet.js +1 -2
  651. package/dist/node_modules/lodash/_hashGet.js.map +1 -1
  652. package/dist/node_modules/lodash/_hashHas.js +1 -2
  653. package/dist/node_modules/lodash/_hashHas.js.map +1 -1
  654. package/dist/node_modules/lodash/_hashSet.js +1 -2
  655. package/dist/node_modules/lodash/_hashSet.js.map +1 -1
  656. package/dist/node_modules/lodash/_isFlattenable.js +5 -6
  657. package/dist/node_modules/lodash/_isFlattenable.js.map +1 -1
  658. package/dist/node_modules/lodash/_isIndex.js +6 -7
  659. package/dist/node_modules/lodash/_isIndex.js.map +1 -1
  660. package/dist/node_modules/lodash/_isIterateeCall.js +5 -6
  661. package/dist/node_modules/lodash/_isIterateeCall.js.map +1 -1
  662. package/dist/node_modules/lodash/_isKey.js +1 -2
  663. package/dist/node_modules/lodash/_isKey.js.map +1 -1
  664. package/dist/node_modules/lodash/_isKeyable.js +1 -2
  665. package/dist/node_modules/lodash/_isKeyable.js.map +1 -1
  666. package/dist/node_modules/lodash/_isMasked.js +1 -2
  667. package/dist/node_modules/lodash/_isMasked.js.map +1 -1
  668. package/dist/node_modules/lodash/_isPrototype.js +1 -2
  669. package/dist/node_modules/lodash/_isPrototype.js.map +1 -1
  670. package/dist/node_modules/lodash/_isStrictComparable.js +1 -2
  671. package/dist/node_modules/lodash/_isStrictComparable.js.map +1 -1
  672. package/dist/node_modules/lodash/_listCacheClear.js +1 -2
  673. package/dist/node_modules/lodash/_listCacheClear.js.map +1 -1
  674. package/dist/node_modules/lodash/_listCacheDelete.js +1 -2
  675. package/dist/node_modules/lodash/_listCacheDelete.js.map +1 -1
  676. package/dist/node_modules/lodash/_listCacheGet.js +1 -2
  677. package/dist/node_modules/lodash/_listCacheGet.js.map +1 -1
  678. package/dist/node_modules/lodash/_listCacheHas.js +1 -2
  679. package/dist/node_modules/lodash/_listCacheHas.js.map +1 -1
  680. package/dist/node_modules/lodash/_listCacheSet.js +1 -2
  681. package/dist/node_modules/lodash/_listCacheSet.js.map +1 -1
  682. package/dist/node_modules/lodash/_mapCacheClear.js +1 -2
  683. package/dist/node_modules/lodash/_mapCacheClear.js.map +1 -1
  684. package/dist/node_modules/lodash/_mapCacheDelete.js +1 -2
  685. package/dist/node_modules/lodash/_mapCacheDelete.js.map +1 -1
  686. package/dist/node_modules/lodash/_mapCacheGet.js +1 -2
  687. package/dist/node_modules/lodash/_mapCacheGet.js.map +1 -1
  688. package/dist/node_modules/lodash/_mapCacheHas.js +1 -2
  689. package/dist/node_modules/lodash/_mapCacheHas.js.map +1 -1
  690. package/dist/node_modules/lodash/_mapCacheSet.js +1 -2
  691. package/dist/node_modules/lodash/_mapCacheSet.js.map +1 -1
  692. package/dist/node_modules/lodash/_mapToArray.js +1 -2
  693. package/dist/node_modules/lodash/_mapToArray.js.map +1 -1
  694. package/dist/node_modules/lodash/_matchesStrictComparable.js +2 -3
  695. package/dist/node_modules/lodash/_matchesStrictComparable.js.map +1 -1
  696. package/dist/node_modules/lodash/_memoizeCapped.js +1 -2
  697. package/dist/node_modules/lodash/_memoizeCapped.js.map +1 -1
  698. package/dist/node_modules/lodash/_nativeCreate.js +1 -2
  699. package/dist/node_modules/lodash/_nativeCreate.js.map +1 -1
  700. package/dist/node_modules/lodash/_nativeKeys.js +1 -2
  701. package/dist/node_modules/lodash/_nativeKeys.js.map +1 -1
  702. package/dist/node_modules/lodash/_nodeUtil.js +1 -2
  703. package/dist/node_modules/lodash/_nodeUtil.js.map +1 -1
  704. package/dist/node_modules/lodash/_objectToString.js +1 -2
  705. package/dist/node_modules/lodash/_objectToString.js.map +1 -1
  706. package/dist/node_modules/lodash/_overArg.js +1 -2
  707. package/dist/node_modules/lodash/_overArg.js.map +1 -1
  708. package/dist/node_modules/lodash/_overRest.js +1 -2
  709. package/dist/node_modules/lodash/_overRest.js.map +1 -1
  710. package/dist/node_modules/lodash/_root.js +1 -2
  711. package/dist/node_modules/lodash/_root.js.map +1 -1
  712. package/dist/node_modules/lodash/_setCacheAdd.js +4 -6
  713. package/dist/node_modules/lodash/_setCacheAdd.js.map +1 -1
  714. package/dist/node_modules/lodash/_setCacheHas.js +1 -2
  715. package/dist/node_modules/lodash/_setCacheHas.js.map +1 -1
  716. package/dist/node_modules/lodash/_setToArray.js +1 -2
  717. package/dist/node_modules/lodash/_setToArray.js.map +1 -1
  718. package/dist/node_modules/lodash/_setToString.js +1 -2
  719. package/dist/node_modules/lodash/_setToString.js.map +1 -1
  720. package/dist/node_modules/lodash/_shortOut.js +8 -9
  721. package/dist/node_modules/lodash/_shortOut.js.map +1 -1
  722. package/dist/node_modules/lodash/_stackClear.js +1 -2
  723. package/dist/node_modules/lodash/_stackClear.js.map +1 -1
  724. package/dist/node_modules/lodash/_stackDelete.js +1 -2
  725. package/dist/node_modules/lodash/_stackDelete.js.map +1 -1
  726. package/dist/node_modules/lodash/_stackGet.js +1 -2
  727. package/dist/node_modules/lodash/_stackGet.js.map +1 -1
  728. package/dist/node_modules/lodash/_stackHas.js +1 -2
  729. package/dist/node_modules/lodash/_stackHas.js.map +1 -1
  730. package/dist/node_modules/lodash/_stackSet.js +1 -2
  731. package/dist/node_modules/lodash/_stackSet.js.map +1 -1
  732. package/dist/node_modules/lodash/_strictIndexOf.js +1 -2
  733. package/dist/node_modules/lodash/_strictIndexOf.js.map +1 -1
  734. package/dist/node_modules/lodash/_stringToArray.js +4 -5
  735. package/dist/node_modules/lodash/_stringToArray.js.map +1 -1
  736. package/dist/node_modules/lodash/_stringToPath.js +1 -2
  737. package/dist/node_modules/lodash/_stringToPath.js.map +1 -1
  738. package/dist/node_modules/lodash/_toKey.js +2 -3
  739. package/dist/node_modules/lodash/_toKey.js.map +1 -1
  740. package/dist/node_modules/lodash/_toSource.js +1 -2
  741. package/dist/node_modules/lodash/_toSource.js.map +1 -1
  742. package/dist/node_modules/lodash/_trimmedEndIndex.js +1 -2
  743. package/dist/node_modules/lodash/_trimmedEndIndex.js.map +1 -1
  744. package/dist/node_modules/lodash/_unicodeToArray.js +1 -2
  745. package/dist/node_modules/lodash/_unicodeToArray.js.map +1 -1
  746. package/dist/node_modules/lodash/constant.js +1 -2
  747. package/dist/node_modules/lodash/constant.js.map +1 -1
  748. package/dist/node_modules/lodash/debounce.js +1 -2
  749. package/dist/node_modules/lodash/debounce.js.map +1 -1
  750. package/dist/node_modules/lodash/eq.js +1 -2
  751. package/dist/node_modules/lodash/eq.js.map +1 -1
  752. package/dist/node_modules/lodash/every.js +7 -8
  753. package/dist/node_modules/lodash/every.js.map +1 -1
  754. package/dist/node_modules/lodash/find.js +1 -2
  755. package/dist/node_modules/lodash/find.js.map +1 -1
  756. package/dist/node_modules/lodash/findIndex.js +4 -5
  757. package/dist/node_modules/lodash/findIndex.js.map +1 -1
  758. package/dist/node_modules/lodash/flatMap.js +1 -2
  759. package/dist/node_modules/lodash/flatMap.js.map +1 -1
  760. package/dist/node_modules/lodash/get.js +1 -2
  761. package/dist/node_modules/lodash/get.js.map +1 -1
  762. package/dist/node_modules/lodash/hasIn.js +1 -2
  763. package/dist/node_modules/lodash/hasIn.js.map +1 -1
  764. package/dist/node_modules/lodash/identity.js +1 -2
  765. package/dist/node_modules/lodash/identity.js.map +1 -1
  766. package/dist/node_modules/lodash/isArguments.js +4 -5
  767. package/dist/node_modules/lodash/isArguments.js.map +1 -1
  768. package/dist/node_modules/lodash/isArray.js +1 -2
  769. package/dist/node_modules/lodash/isArray.js.map +1 -1
  770. package/dist/node_modules/lodash/isArrayLike.js +1 -2
  771. package/dist/node_modules/lodash/isArrayLike.js.map +1 -1
  772. package/dist/node_modules/lodash/isBoolean.js +1 -2
  773. package/dist/node_modules/lodash/isBoolean.js.map +1 -1
  774. package/dist/node_modules/lodash/isBuffer.js +1 -2
  775. package/dist/node_modules/lodash/isBuffer.js.map +1 -1
  776. package/dist/node_modules/lodash/isEqual.js +1 -2
  777. package/dist/node_modules/lodash/isEqual.js.map +1 -1
  778. package/dist/node_modules/lodash/isFunction.js +1 -2
  779. package/dist/node_modules/lodash/isFunction.js.map +1 -1
  780. package/dist/node_modules/lodash/isLength.js +4 -6
  781. package/dist/node_modules/lodash/isLength.js.map +1 -1
  782. package/dist/node_modules/lodash/isNaN.js +1 -2
  783. package/dist/node_modules/lodash/isNaN.js.map +1 -1
  784. package/dist/node_modules/lodash/isNil.js +1 -2
  785. package/dist/node_modules/lodash/isNil.js.map +1 -1
  786. package/dist/node_modules/lodash/isNumber.js +1 -2
  787. package/dist/node_modules/lodash/isNumber.js.map +1 -1
  788. package/dist/node_modules/lodash/isObject.js +1 -2
  789. package/dist/node_modules/lodash/isObject.js.map +1 -1
  790. package/dist/node_modules/lodash/isObjectLike.js +1 -2
  791. package/dist/node_modules/lodash/isObjectLike.js.map +1 -1
  792. package/dist/node_modules/lodash/isPlainObject.js +4 -5
  793. package/dist/node_modules/lodash/isPlainObject.js.map +1 -1
  794. package/dist/node_modules/lodash/isString.js +4 -5
  795. package/dist/node_modules/lodash/isString.js.map +1 -1
  796. package/dist/node_modules/lodash/isSymbol.js +1 -2
  797. package/dist/node_modules/lodash/isSymbol.js.map +1 -1
  798. package/dist/node_modules/lodash/isTypedArray.js +1 -2
  799. package/dist/node_modules/lodash/isTypedArray.js.map +1 -1
  800. package/dist/node_modules/lodash/keys.js +1 -2
  801. package/dist/node_modules/lodash/keys.js.map +1 -1
  802. package/dist/node_modules/lodash/last.js +1 -2
  803. package/dist/node_modules/lodash/last.js.map +1 -1
  804. package/dist/node_modules/lodash/map.js +6 -7
  805. package/dist/node_modules/lodash/map.js.map +1 -1
  806. package/dist/node_modules/lodash/mapValues.js +4 -5
  807. package/dist/node_modules/lodash/mapValues.js.map +1 -1
  808. package/dist/node_modules/lodash/max.js +5 -6
  809. package/dist/node_modules/lodash/max.js.map +1 -1
  810. package/dist/node_modules/lodash/memoize.js +1 -2
  811. package/dist/node_modules/lodash/memoize.js.map +1 -1
  812. package/dist/node_modules/lodash/min.js +5 -6
  813. package/dist/node_modules/lodash/min.js.map +1 -1
  814. package/dist/node_modules/lodash/noop.js +1 -2
  815. package/dist/node_modules/lodash/noop.js.map +1 -1
  816. package/dist/node_modules/lodash/now.js +1 -2
  817. package/dist/node_modules/lodash/now.js.map +1 -1
  818. package/dist/node_modules/lodash/property.js +6 -7
  819. package/dist/node_modules/lodash/property.js.map +1 -1
  820. package/dist/node_modules/lodash/range.js +1 -2
  821. package/dist/node_modules/lodash/range.js.map +1 -1
  822. package/dist/node_modules/lodash/some.js +7 -8
  823. package/dist/node_modules/lodash/some.js.map +1 -1
  824. package/dist/node_modules/lodash/sortBy.js +1 -2
  825. package/dist/node_modules/lodash/sortBy.js.map +1 -1
  826. package/dist/node_modules/lodash/stubArray.js +1 -2
  827. package/dist/node_modules/lodash/stubArray.js.map +1 -1
  828. package/dist/node_modules/lodash/stubFalse.js +1 -2
  829. package/dist/node_modules/lodash/stubFalse.js.map +1 -1
  830. package/dist/node_modules/lodash/throttle.js +4 -5
  831. package/dist/node_modules/lodash/throttle.js.map +1 -1
  832. package/dist/node_modules/lodash/toFinite.js +2 -3
  833. package/dist/node_modules/lodash/toFinite.js.map +1 -1
  834. package/dist/node_modules/lodash/toInteger.js +1 -2
  835. package/dist/node_modules/lodash/toInteger.js.map +1 -1
  836. package/dist/node_modules/lodash/toNumber.js +4 -5
  837. package/dist/node_modules/lodash/toNumber.js.map +1 -1
  838. package/dist/node_modules/lodash/toString.js +1 -2
  839. package/dist/node_modules/lodash/toString.js.map +1 -1
  840. package/dist/node_modules/lodash/uniqBy.js +1 -2
  841. package/dist/node_modules/lodash/uniqBy.js.map +1 -1
  842. package/dist/node_modules/lodash/upperFirst.js +1 -2
  843. package/dist/node_modules/lodash/upperFirst.js.map +1 -1
  844. package/dist/node_modules/object-assign/index.js +1 -2
  845. package/dist/node_modules/object-assign/index.js.map +1 -1
  846. package/dist/node_modules/prop-types/checkPropTypes.js +1 -2
  847. package/dist/node_modules/prop-types/checkPropTypes.js.map +1 -1
  848. package/dist/node_modules/prop-types/factoryWithThrowingShims.js +1 -2
  849. package/dist/node_modules/prop-types/factoryWithThrowingShims.js.map +1 -1
  850. package/dist/node_modules/prop-types/factoryWithTypeCheckers.js +3 -3
  851. package/dist/node_modules/prop-types/factoryWithTypeCheckers.js.map +1 -1
  852. package/dist/node_modules/prop-types/index.js +1 -2
  853. package/dist/node_modules/prop-types/index.js.map +1 -1
  854. package/dist/node_modules/prop-types/lib/ReactPropTypesSecret.js +1 -2
  855. package/dist/node_modules/prop-types/lib/ReactPropTypesSecret.js.map +1 -1
  856. package/dist/node_modules/prop-types/lib/has.js +1 -2
  857. package/dist/node_modules/prop-types/lib/has.js.map +1 -1
  858. package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js +1 -2
  859. package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js.map +1 -1
  860. package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js +1 -2
  861. package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js.map +1 -1
  862. package/dist/node_modules/prop-types/node_modules/react-is/index.js +2 -3
  863. package/dist/node_modules/prop-types/node_modules/react-is/index.js.map +1 -1
  864. package/dist/node_modules/react-is/cjs/react-is.development.js +31 -32
  865. package/dist/node_modules/react-is/cjs/react-is.development.js.map +1 -1
  866. package/dist/node_modules/react-is/cjs/react-is.production.min.js +1 -2
  867. package/dist/node_modules/react-is/cjs/react-is.production.min.js.map +1 -1
  868. package/dist/node_modules/react-is/index.js +2 -3
  869. package/dist/node_modules/react-is/index.js.map +1 -1
  870. package/dist/node_modules/react-smooth/es6/Animate.js +33 -41
  871. package/dist/node_modules/react-smooth/es6/Animate.js.map +1 -1
  872. package/dist/node_modules/react-smooth/es6/AnimateManager.js +2 -5
  873. package/dist/node_modules/react-smooth/es6/AnimateManager.js.map +1 -1
  874. package/dist/node_modules/react-smooth/es6/configUpdate.js +1 -2
  875. package/dist/node_modules/react-smooth/es6/configUpdate.js.map +1 -1
  876. package/dist/node_modules/react-smooth/es6/easing.js +1 -2
  877. package/dist/node_modules/react-smooth/es6/easing.js.map +1 -1
  878. package/dist/node_modules/react-smooth/es6/index.js +1 -2
  879. package/dist/node_modules/react-smooth/es6/index.js.map +1 -1
  880. package/dist/node_modules/react-smooth/es6/setRafTimeout.js +1 -2
  881. package/dist/node_modules/react-smooth/es6/setRafTimeout.js.map +1 -1
  882. package/dist/node_modules/react-smooth/es6/util.js +17 -16
  883. package/dist/node_modules/react-smooth/es6/util.js.map +1 -1
  884. package/dist/node_modules/recharts/es6/cartesian/Bar.js +103 -104
  885. package/dist/node_modules/recharts/es6/cartesian/Bar.js.map +1 -1
  886. package/dist/node_modules/recharts/es6/cartesian/Brush.js +35 -36
  887. package/dist/node_modules/recharts/es6/cartesian/Brush.js.map +1 -1
  888. package/dist/node_modules/recharts/es6/cartesian/CartesianAxis.js +60 -67
  889. package/dist/node_modules/recharts/es6/cartesian/CartesianAxis.js.map +1 -1
  890. package/dist/node_modules/recharts/es6/cartesian/CartesianGrid.js +45 -46
  891. package/dist/node_modules/recharts/es6/cartesian/CartesianGrid.js.map +1 -1
  892. package/dist/node_modules/recharts/es6/cartesian/ErrorBar.js +20 -21
  893. package/dist/node_modules/recharts/es6/cartesian/ErrorBar.js.map +1 -1
  894. package/dist/node_modules/recharts/es6/cartesian/Line.js +79 -80
  895. package/dist/node_modules/recharts/es6/cartesian/Line.js.map +1 -1
  896. package/dist/node_modules/recharts/es6/cartesian/ReferenceArea.js +29 -30
  897. package/dist/node_modules/recharts/es6/cartesian/ReferenceArea.js.map +1 -1
  898. package/dist/node_modules/recharts/es6/cartesian/ReferenceDot.js +23 -24
  899. package/dist/node_modules/recharts/es6/cartesian/ReferenceDot.js.map +1 -1
  900. package/dist/node_modules/recharts/es6/cartesian/ReferenceLine.js +31 -32
  901. package/dist/node_modules/recharts/es6/cartesian/ReferenceLine.js.map +1 -1
  902. package/dist/node_modules/recharts/es6/cartesian/XAxis.js +10 -11
  903. package/dist/node_modules/recharts/es6/cartesian/XAxis.js.map +1 -1
  904. package/dist/node_modules/recharts/es6/cartesian/YAxis.js +10 -11
  905. package/dist/node_modules/recharts/es6/cartesian/YAxis.js.map +1 -1
  906. package/dist/node_modules/recharts/es6/cartesian/getEquidistantTicks.js +5 -6
  907. package/dist/node_modules/recharts/es6/cartesian/getEquidistantTicks.js.map +1 -1
  908. package/dist/node_modules/recharts/es6/cartesian/getTicks.js +7 -8
  909. package/dist/node_modules/recharts/es6/cartesian/getTicks.js.map +1 -1
  910. package/dist/node_modules/recharts/es6/chart/AccessibilityManager.js +2 -5
  911. package/dist/node_modules/recharts/es6/chart/AccessibilityManager.js.map +1 -1
  912. package/dist/node_modules/recharts/es6/chart/BarChart.js +7 -8
  913. package/dist/node_modules/recharts/es6/chart/BarChart.js.map +1 -1
  914. package/dist/node_modules/recharts/es6/chart/LineChart.js +5 -6
  915. package/dist/node_modules/recharts/es6/chart/LineChart.js.map +1 -1
  916. package/dist/node_modules/recharts/es6/chart/generateCategoricalChart.js +534 -533
  917. package/dist/node_modules/recharts/es6/chart/generateCategoricalChart.js.map +1 -1
  918. package/dist/node_modules/recharts/es6/component/Cell.js +1 -2
  919. package/dist/node_modules/recharts/es6/component/Cell.js.map +1 -1
  920. package/dist/node_modules/recharts/es6/component/Cursor.js +17 -18
  921. package/dist/node_modules/recharts/es6/component/Cursor.js.map +1 -1
  922. package/dist/node_modules/recharts/es6/component/DefaultLegendContent.js +35 -36
  923. package/dist/node_modules/recharts/es6/component/DefaultLegendContent.js.map +1 -1
  924. package/dist/node_modules/recharts/es6/component/DefaultTooltipContent.js +16 -17
  925. package/dist/node_modules/recharts/es6/component/DefaultTooltipContent.js.map +1 -1
  926. package/dist/node_modules/recharts/es6/component/Label.js +85 -86
  927. package/dist/node_modules/recharts/es6/component/Label.js.map +1 -1
  928. package/dist/node_modules/recharts/es6/component/LabelList.js +20 -21
  929. package/dist/node_modules/recharts/es6/component/LabelList.js.map +1 -1
  930. package/dist/node_modules/recharts/es6/component/Legend.js +26 -23
  931. package/dist/node_modules/recharts/es6/component/Legend.js.map +1 -1
  932. package/dist/node_modules/recharts/es6/component/ResponsiveContainer.js +16 -17
  933. package/dist/node_modules/recharts/es6/component/ResponsiveContainer.js.map +1 -1
  934. package/dist/node_modules/recharts/es6/component/Text.js +18 -21
  935. package/dist/node_modules/recharts/es6/component/Text.js.map +1 -1
  936. package/dist/node_modules/recharts/es6/component/Tooltip.js +16 -17
  937. package/dist/node_modules/recharts/es6/component/Tooltip.js.map +1 -1
  938. package/dist/node_modules/recharts/es6/component/TooltipBoundingBox.js +3 -4
  939. package/dist/node_modules/recharts/es6/component/TooltipBoundingBox.js.map +1 -1
  940. package/dist/node_modules/recharts/es6/container/Layer.js +5 -6
  941. package/dist/node_modules/recharts/es6/container/Layer.js.map +1 -1
  942. package/dist/node_modules/recharts/es6/container/Surface.js +5 -6
  943. package/dist/node_modules/recharts/es6/container/Surface.js.map +1 -1
  944. package/dist/node_modules/recharts/es6/context/chartLayoutContext.js +21 -21
  945. package/dist/node_modules/recharts/es6/context/chartLayoutContext.js.map +1 -1
  946. package/dist/node_modules/recharts/es6/shape/Cross.js +4 -5
  947. package/dist/node_modules/recharts/es6/shape/Cross.js.map +1 -1
  948. package/dist/node_modules/recharts/es6/shape/Curve.js +38 -49
  949. package/dist/node_modules/recharts/es6/shape/Curve.js.map +1 -1
  950. package/dist/node_modules/recharts/es6/shape/Dot.js +3 -4
  951. package/dist/node_modules/recharts/es6/shape/Dot.js.map +1 -1
  952. package/dist/node_modules/recharts/es6/shape/Rectangle.js +8 -9
  953. package/dist/node_modules/recharts/es6/shape/Rectangle.js.map +1 -1
  954. package/dist/node_modules/recharts/es6/shape/Sector.js +33 -34
  955. package/dist/node_modules/recharts/es6/shape/Sector.js.map +1 -1
  956. package/dist/node_modules/recharts/es6/shape/Symbols.js +26 -34
  957. package/dist/node_modules/recharts/es6/shape/Symbols.js.map +1 -1
  958. package/dist/node_modules/recharts/es6/shape/Trapezoid.js +8 -9
  959. package/dist/node_modules/recharts/es6/shape/Trapezoid.js.map +1 -1
  960. package/dist/node_modules/recharts/es6/util/ActiveShapeUtils.js +24 -25
  961. package/dist/node_modules/recharts/es6/util/ActiveShapeUtils.js.map +1 -1
  962. package/dist/node_modules/recharts/es6/util/BarUtils.js +10 -11
  963. package/dist/node_modules/recharts/es6/util/BarUtils.js.map +1 -1
  964. package/dist/node_modules/recharts/es6/util/CartesianUtils.js +33 -34
  965. package/dist/node_modules/recharts/es6/util/CartesianUtils.js.map +1 -1
  966. package/dist/node_modules/recharts/es6/util/ChartUtils.js +231 -236
  967. package/dist/node_modules/recharts/es6/util/ChartUtils.js.map +1 -1
  968. package/dist/node_modules/recharts/es6/util/CssPrefixUtils.js +1 -2
  969. package/dist/node_modules/recharts/es6/util/CssPrefixUtils.js.map +1 -1
  970. package/dist/node_modules/recharts/es6/util/DOMUtils.js +1 -2
  971. package/dist/node_modules/recharts/es6/util/DOMUtils.js.map +1 -1
  972. package/dist/node_modules/recharts/es6/util/DataUtils.js +7 -8
  973. package/dist/node_modules/recharts/es6/util/DataUtils.js.map +1 -1
  974. package/dist/node_modules/recharts/es6/util/DetectReferenceElementsDomain.js +20 -21
  975. package/dist/node_modules/recharts/es6/util/DetectReferenceElementsDomain.js.map +1 -1
  976. package/dist/node_modules/recharts/es6/util/Events.js +0 -1
  977. package/dist/node_modules/recharts/es6/util/Events.js.map +1 -1
  978. package/dist/node_modules/recharts/es6/util/Global.js +0 -1
  979. package/dist/node_modules/recharts/es6/util/Global.js.map +1 -1
  980. package/dist/node_modules/recharts/es6/util/IfOverflowMatches.js +1 -2
  981. package/dist/node_modules/recharts/es6/util/IfOverflowMatches.js.map +1 -1
  982. package/dist/node_modules/recharts/es6/util/LogUtils.js +9 -8
  983. package/dist/node_modules/recharts/es6/util/LogUtils.js.map +1 -1
  984. package/dist/node_modules/recharts/es6/util/PolarUtils.js +4 -5
  985. package/dist/node_modules/recharts/es6/util/PolarUtils.js.map +1 -1
  986. package/dist/node_modules/recharts/es6/util/ReactUtils.js +11 -12
  987. package/dist/node_modules/recharts/es6/util/ReactUtils.js.map +1 -1
  988. package/dist/node_modules/recharts/es6/util/ReduceCSSCalc.js +5 -6
  989. package/dist/node_modules/recharts/es6/util/ReduceCSSCalc.js.map +1 -1
  990. package/dist/node_modules/recharts/es6/util/ShallowEqual.js +1 -2
  991. package/dist/node_modules/recharts/es6/util/ShallowEqual.js.map +1 -1
  992. package/dist/node_modules/recharts/es6/util/TickUtils.js +4 -4
  993. package/dist/node_modules/recharts/es6/util/TickUtils.js.map +1 -1
  994. package/dist/node_modules/recharts/es6/util/calculateViewBox.js +0 -1
  995. package/dist/node_modules/recharts/es6/util/calculateViewBox.js.map +1 -1
  996. package/dist/node_modules/recharts/es6/util/cursor/getCursorPoints.js +7 -6
  997. package/dist/node_modules/recharts/es6/util/cursor/getCursorPoints.js.map +1 -1
  998. package/dist/node_modules/recharts/es6/util/cursor/getCursorRectangle.js +1 -2
  999. package/dist/node_modules/recharts/es6/util/cursor/getCursorRectangle.js.map +1 -1
  1000. package/dist/node_modules/recharts/es6/util/cursor/getRadialCursorPoints.js +1 -2
  1001. package/dist/node_modules/recharts/es6/util/cursor/getRadialCursorPoints.js.map +1 -1
  1002. package/dist/node_modules/recharts/es6/util/getEveryNthWithCondition.js +1 -2
  1003. package/dist/node_modules/recharts/es6/util/getEveryNthWithCondition.js.map +1 -1
  1004. package/dist/node_modules/recharts/es6/util/getLegendProps.js +9 -10
  1005. package/dist/node_modules/recharts/es6/util/getLegendProps.js.map +1 -1
  1006. package/dist/node_modules/recharts/es6/util/isDomainSpecifiedByUser.js +1 -2
  1007. package/dist/node_modules/recharts/es6/util/isDomainSpecifiedByUser.js.map +1 -1
  1008. package/dist/node_modules/recharts/es6/util/payload/getUniqPayload.js +4 -5
  1009. package/dist/node_modules/recharts/es6/util/payload/getUniqPayload.js.map +1 -1
  1010. package/dist/node_modules/recharts/es6/util/tooltip/translate.js +3 -4
  1011. package/dist/node_modules/recharts/es6/util/tooltip/translate.js.map +1 -1
  1012. package/dist/node_modules/recharts/es6/util/types.js +2 -3
  1013. package/dist/node_modules/recharts/es6/util/types.js.map +1 -1
  1014. package/dist/node_modules/recharts-scale/es6/getNiceTickValues.js +2 -3
  1015. package/dist/node_modules/recharts-scale/es6/getNiceTickValues.js.map +1 -1
  1016. package/dist/node_modules/recharts-scale/es6/index.js +1 -1
  1017. package/dist/node_modules/recharts-scale/es6/util/arithmetic.js +1 -2
  1018. package/dist/node_modules/recharts-scale/es6/util/arithmetic.js.map +1 -1
  1019. package/dist/node_modules/recharts-scale/es6/util/utils.js +3 -4
  1020. package/dist/node_modules/recharts-scale/es6/util/utils.js.map +1 -1
  1021. package/dist/node_modules/rxjs/dist/esm5/internal/NotificationFactories.js +2 -3
  1022. package/dist/node_modules/rxjs/dist/esm5/internal/NotificationFactories.js.map +1 -1
  1023. package/dist/node_modules/rxjs/dist/esm5/internal/Observable.js +41 -42
  1024. package/dist/node_modules/rxjs/dist/esm5/internal/Observable.js.map +1 -1
  1025. package/dist/node_modules/rxjs/dist/esm5/internal/Subscriber.js +14 -15
  1026. package/dist/node_modules/rxjs/dist/esm5/internal/Subscriber.js.map +1 -1
  1027. package/dist/node_modules/rxjs/dist/esm5/internal/Subscription.js +21 -18
  1028. package/dist/node_modules/rxjs/dist/esm5/internal/Subscription.js.map +1 -1
  1029. package/dist/node_modules/rxjs/dist/esm5/internal/config.js +1 -2
  1030. package/dist/node_modules/rxjs/dist/esm5/internal/config.js.map +1 -1
  1031. package/dist/node_modules/rxjs/dist/esm5/internal/observable/empty.js +1 -2
  1032. package/dist/node_modules/rxjs/dist/esm5/internal/observable/empty.js.map +1 -1
  1033. package/dist/node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js +2 -3
  1034. package/dist/node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js.map +1 -1
  1035. package/dist/node_modules/rxjs/dist/esm5/internal/symbol/observable.js +1 -2
  1036. package/dist/node_modules/rxjs/dist/esm5/internal/symbol/observable.js.map +1 -1
  1037. package/dist/node_modules/rxjs/dist/esm5/internal/util/UnsubscriptionError.js +1 -2
  1038. package/dist/node_modules/rxjs/dist/esm5/internal/util/UnsubscriptionError.js.map +1 -1
  1039. package/dist/node_modules/rxjs/dist/esm5/internal/util/arrRemove.js +1 -2
  1040. package/dist/node_modules/rxjs/dist/esm5/internal/util/arrRemove.js.map +1 -1
  1041. package/dist/node_modules/rxjs/dist/esm5/internal/util/createErrorClass.js +1 -2
  1042. package/dist/node_modules/rxjs/dist/esm5/internal/util/createErrorClass.js.map +1 -1
  1043. package/dist/node_modules/rxjs/dist/esm5/internal/util/errorContext.js +1 -2
  1044. package/dist/node_modules/rxjs/dist/esm5/internal/util/errorContext.js.map +1 -1
  1045. package/dist/node_modules/rxjs/dist/esm5/internal/util/identity.js +1 -2
  1046. package/dist/node_modules/rxjs/dist/esm5/internal/util/identity.js.map +1 -1
  1047. package/dist/node_modules/rxjs/dist/esm5/internal/util/isFunction.js +1 -2
  1048. package/dist/node_modules/rxjs/dist/esm5/internal/util/isFunction.js.map +1 -1
  1049. package/dist/node_modules/rxjs/dist/esm5/internal/util/noop.js +1 -2
  1050. package/dist/node_modules/rxjs/dist/esm5/internal/util/noop.js.map +1 -1
  1051. package/dist/node_modules/rxjs/dist/esm5/internal/util/pipe.js +1 -2
  1052. package/dist/node_modules/rxjs/dist/esm5/internal/util/pipe.js.map +1 -1
  1053. package/dist/node_modules/rxjs/dist/esm5/internal/util/reportUnhandledError.js +1 -2
  1054. package/dist/node_modules/rxjs/dist/esm5/internal/util/reportUnhandledError.js.map +1 -1
  1055. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js +229 -167
  1056. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js.map +1 -1
  1057. package/dist/node_modules/tiny-invariant/dist/esm/tiny-invariant.js +2 -3
  1058. package/dist/node_modules/tiny-invariant/dist/esm/tiny-invariant.js.map +1 -1
  1059. package/dist/node_modules/{rxjs/node_modules/tslib → tslib}/tslib.es6.js +1 -2
  1060. package/dist/node_modules/tslib/tslib.es6.js.map +1 -0
  1061. package/dist/node_modules/victory-vendor/es/d3-scale.js +28 -45
  1062. package/dist/node_modules/victory-vendor/es/d3-scale.js.map +1 -1
  1063. package/dist/test/happydom.d.ts +1 -0
  1064. package/dist/translations/en.d.ts +91 -1
  1065. package/dist/translations/en.js +92 -2
  1066. package/dist/translations/en.js.map +1 -1
  1067. package/dist/utils/nativeBridge.d.ts +0 -1
  1068. package/dist/utils/nativeBridge.js +1 -2
  1069. package/package.json +76 -60
  1070. package/dist/__tests__/setup.d.ts +0 -2
  1071. package/dist/__tests__/setup.d.ts.map +0 -1
  1072. package/dist/__tests__/utils/renderWithProviders.d.ts.map +0 -1
  1073. package/dist/dev/main.d.ts.map +0 -1
  1074. package/dist/devportal/AdminDevportalRoot.d.ts.map +0 -1
  1075. package/dist/devportal/AdminDevportalRoutes.d.ts.map +0 -1
  1076. package/dist/devportal/DevportalRoot.d.ts.map +0 -1
  1077. package/dist/devportal/DevportalRoutes.d.ts.map +0 -1
  1078. package/dist/devportal/components/AppCard.d.ts.map +0 -1
  1079. package/dist/devportal/components/ConfirmDialog.d.ts.map +0 -1
  1080. package/dist/devportal/components/DataTable.d.ts.map +0 -1
  1081. package/dist/devportal/components/EmptyState.d.ts.map +0 -1
  1082. package/dist/devportal/components/FeatureFlaggedRoute.d.ts.map +0 -1
  1083. package/dist/devportal/components/FormField.d.ts.map +0 -1
  1084. package/dist/devportal/components/GrantDelegationModal.d.ts.map +0 -1
  1085. package/dist/devportal/components/ImageUploadField.d.ts.map +0 -1
  1086. package/dist/devportal/components/LoadingState.d.ts.map +0 -1
  1087. package/dist/devportal/components/ManifestViewer.d.ts.map +0 -1
  1088. package/dist/devportal/components/MarkdownEditor.d.ts.map +0 -1
  1089. package/dist/devportal/components/MultiSelectCombobox.d.ts.map +0 -1
  1090. package/dist/devportal/components/NodeSmokePanel.d.ts.map +0 -1
  1091. package/dist/devportal/components/OnboardingChecklist.d.ts.map +0 -1
  1092. package/dist/devportal/components/PackageValidationPanel.d.ts.map +0 -1
  1093. package/dist/devportal/components/PageLayout.d.ts.map +0 -1
  1094. package/dist/devportal/components/PermissionGuard.d.ts.map +0 -1
  1095. package/dist/devportal/components/RegisterPickupLocationModal.d.ts.map +0 -1
  1096. package/dist/devportal/components/ReportOrderIssueModal.d.ts.map +0 -1
  1097. package/dist/devportal/components/SecretDisplay.d.ts.map +0 -1
  1098. package/dist/devportal/components/SectionNav.d.ts.map +0 -1
  1099. package/dist/devportal/components/SelectionCheckbox.d.ts.map +0 -1
  1100. package/dist/devportal/components/StatCard.d.ts.map +0 -1
  1101. package/dist/devportal/components/StatusBadge.d.ts.map +0 -1
  1102. package/dist/devportal/components/TelemetryErrorBoundary.d.ts.map +0 -1
  1103. package/dist/devportal/components/index.d.ts.map +0 -1
  1104. package/dist/devportal/constants/appCategories.d.ts.map +0 -1
  1105. package/dist/devportal/constants/developerLinks.d.ts.map +0 -1
  1106. package/dist/devportal/constants/permissions.d.ts.map +0 -1
  1107. package/dist/devportal/events/index.d.ts.map +0 -1
  1108. package/dist/devportal/hooks/DevPortalProvider.d.ts.map +0 -1
  1109. package/dist/devportal/hooks/index.d.ts.map +0 -1
  1110. package/dist/devportal/hooks/useCarrierPickupLocations.d.ts.map +0 -1
  1111. package/dist/devportal/hooks/useGraphQL.d.ts.map +0 -1
  1112. package/dist/devportal/hooks/useIsSellerSection.d.ts.map +0 -1
  1113. package/dist/devportal/hooks/useOrganizationPickupAddresses.d.ts.map +0 -1
  1114. package/dist/devportal/hooks/usePackageUpload.d.ts.map +0 -1
  1115. package/dist/devportal/hooks/usePermission.d.ts.map +0 -1
  1116. package/dist/devportal/hooks/useProducts.d.ts.map +0 -1
  1117. package/dist/devportal/hooks/useSellerOrganization.d.ts.map +0 -1
  1118. package/dist/devportal/index.d.ts.map +0 -1
  1119. package/dist/devportal/pages/AdminOrganizationVerificationPage.d.ts.map +0 -1
  1120. package/dist/devportal/pages/AdminReviewPage.d.ts.map +0 -1
  1121. package/dist/devportal/pages/AnalyticsDashboardPage.d.ts.map +0 -1
  1122. package/dist/devportal/pages/ApiKeysPage.d.ts.map +0 -1
  1123. package/dist/devportal/pages/AppLogsPage.d.ts.map +0 -1
  1124. package/dist/devportal/pages/ApplicationDetailPage.d.ts.map +0 -1
  1125. package/dist/devportal/pages/ApplicationVersionsPage.d.ts.map +0 -1
  1126. package/dist/devportal/pages/ApplicationsPage.d.ts.map +0 -1
  1127. package/dist/devportal/pages/CreateApiKeyPage.d.ts.map +0 -1
  1128. package/dist/devportal/pages/CreateApplicationPage.d.ts.map +0 -1
  1129. package/dist/devportal/pages/CreateOAuthClientPage.d.ts.map +0 -1
  1130. package/dist/devportal/pages/CreateOrganizationPage.d.ts.map +0 -1
  1131. package/dist/devportal/pages/CreatePhysicalItemPage.d.ts.map +0 -1
  1132. package/dist/devportal/pages/CreateWebhookPage.d.ts.map +0 -1
  1133. package/dist/devportal/pages/DashboardPage.d.ts.map +0 -1
  1134. package/dist/devportal/pages/DelegationsPage.d.ts.map +0 -1
  1135. package/dist/devportal/pages/DocumentationPage.d.ts.map +0 -1
  1136. package/dist/devportal/pages/EditApplicationPage.d.ts.map +0 -1
  1137. package/dist/devportal/pages/EditPhysicalItemPage.d.ts.map +0 -1
  1138. package/dist/devportal/pages/InvitationDecisionPage.d.ts.map +0 -1
  1139. package/dist/devportal/pages/ListingPreviewPage.d.ts.map +0 -1
  1140. package/dist/devportal/pages/NodeLifecyclePage.d.ts.map +0 -1
  1141. package/dist/devportal/pages/OAuthCallbackPage.d.ts.map +0 -1
  1142. package/dist/devportal/pages/OAuthClientDetailPage.d.ts.map +0 -1
  1143. package/dist/devportal/pages/OAuthClientsPage.d.ts.map +0 -1
  1144. package/dist/devportal/pages/OrganizationDetailPage.d.ts.map +0 -1
  1145. package/dist/devportal/pages/OrganizationMembersPage.d.ts.map +0 -1
  1146. package/dist/devportal/pages/OrganizationsPage.d.ts.map +0 -1
  1147. package/dist/devportal/pages/PublishPage.d.ts.map +0 -1
  1148. package/dist/devportal/pages/PublisherProfilePage.d.ts.map +0 -1
  1149. package/dist/devportal/pages/ResourcesPage.d.ts.map +0 -1
  1150. package/dist/devportal/pages/RevenueDashboardPage.d.ts.map +0 -1
  1151. package/dist/devportal/pages/RevenueRedirectPage.d.ts.map +0 -1
  1152. package/dist/devportal/pages/SellerDashboardPage.d.ts.map +0 -1
  1153. package/dist/devportal/pages/SellerItemsPage.d.ts.map +0 -1
  1154. package/dist/devportal/pages/SellerOrdersPage.d.ts.map +0 -1
  1155. package/dist/devportal/pages/SettingsPage.d.ts.map +0 -1
  1156. package/dist/devportal/pages/SetupPage.d.ts.map +0 -1
  1157. package/dist/devportal/pages/StoreSubmissionPage.d.ts.map +0 -1
  1158. package/dist/devportal/pages/WebhookDetailPage.d.ts.map +0 -1
  1159. package/dist/devportal/pages/WebhooksPage.d.ts.map +0 -1
  1160. package/dist/devportal/providers/DevportalProvider.d.ts.map +0 -1
  1161. package/dist/devportal/store/devportalStore.d.ts.map +0 -1
  1162. package/dist/devportal/types/index.d.ts.map +0 -1
  1163. package/dist/devportal/utils/cn.d.ts.map +0 -1
  1164. package/dist/devportal/utils/constants.d.ts.map +0 -1
  1165. package/dist/devportal/utils/currency.d.ts.map +0 -1
  1166. package/dist/devportal/utils/developerOnboarding.d.ts.map +0 -1
  1167. package/dist/devportal/utils/graphqlEndpoint.d.ts.map +0 -1
  1168. package/dist/devportal/utils/i18n.d.ts.map +0 -1
  1169. package/dist/devportal/utils/nodeLifecycle.d.ts.map +0 -1
  1170. package/dist/devportal/utils/recaptcha.d.ts.map +0 -1
  1171. package/dist/devportal/utils/submitForReview.d.ts.map +0 -1
  1172. package/dist/devportal/utils/uploadErrors.d.ts.map +0 -1
  1173. package/dist/generated/global-operations.d.ts.map +0 -1
  1174. package/dist/generated/global-types.d.ts.map +0 -1
  1175. package/dist/generated/wspace-operations.d.ts.map +0 -1
  1176. package/dist/generated/wspace-types.d.ts.map +0 -1
  1177. package/dist/index.d.ts.map +0 -1
  1178. package/dist/node_modules/d3-array/src/ascending.js +0 -8
  1179. package/dist/node_modules/d3-array/src/ascending.js.map +0 -1
  1180. package/dist/node_modules/d3-array/src/bisect.js +0 -10
  1181. package/dist/node_modules/d3-array/src/bisect.js.map +0 -1
  1182. package/dist/node_modules/d3-array/src/bisector.js +0 -43
  1183. package/dist/node_modules/d3-array/src/bisector.js.map +0 -1
  1184. package/dist/node_modules/d3-array/src/descending.js +0 -8
  1185. package/dist/node_modules/d3-array/src/descending.js.map +0 -1
  1186. package/dist/node_modules/d3-array/src/max.js +0 -14
  1187. package/dist/node_modules/d3-array/src/max.js.map +0 -1
  1188. package/dist/node_modules/d3-array/src/min.js +0 -14
  1189. package/dist/node_modules/d3-array/src/min.js.map +0 -1
  1190. package/dist/node_modules/d3-array/src/number.js +0 -15
  1191. package/dist/node_modules/d3-array/src/number.js.map +0 -1
  1192. package/dist/node_modules/d3-array/src/quantile.js +0 -25
  1193. package/dist/node_modules/d3-array/src/quantile.js.map +0 -1
  1194. package/dist/node_modules/d3-array/src/quickselect.js +0 -26
  1195. package/dist/node_modules/d3-array/src/quickselect.js.map +0 -1
  1196. package/dist/node_modules/d3-array/src/range.js +0 -10
  1197. package/dist/node_modules/d3-array/src/range.js.map +0 -1
  1198. package/dist/node_modules/d3-array/src/sort.js +0 -17
  1199. package/dist/node_modules/d3-array/src/sort.js.map +0 -1
  1200. package/dist/node_modules/d3-array/src/ticks.js +0 -34
  1201. package/dist/node_modules/d3-array/src/ticks.js.map +0 -1
  1202. package/dist/node_modules/d3-color/src/color.js +0 -291
  1203. package/dist/node_modules/d3-color/src/color.js.map +0 -1
  1204. package/dist/node_modules/d3-color/src/define.js +0 -13
  1205. package/dist/node_modules/d3-color/src/define.js.map +0 -1
  1206. package/dist/node_modules/d3-format/src/defaultLocale.js +0 -15
  1207. package/dist/node_modules/d3-format/src/defaultLocale.js.map +0 -1
  1208. package/dist/node_modules/d3-format/src/exponent.js +0 -9
  1209. package/dist/node_modules/d3-format/src/exponent.js.map +0 -1
  1210. package/dist/node_modules/d3-format/src/formatDecimal.js +0 -13
  1211. package/dist/node_modules/d3-format/src/formatDecimal.js.map +0 -1
  1212. package/dist/node_modules/d3-format/src/formatGroup.js +0 -11
  1213. package/dist/node_modules/d3-format/src/formatGroup.js.map +0 -1
  1214. package/dist/node_modules/d3-format/src/formatNumerals.js +0 -12
  1215. package/dist/node_modules/d3-format/src/formatNumerals.js.map +0 -1
  1216. package/dist/node_modules/d3-format/src/formatPrefixAuto.js +0 -13
  1217. package/dist/node_modules/d3-format/src/formatPrefixAuto.js.map +0 -1
  1218. package/dist/node_modules/d3-format/src/formatRounded.js +0 -12
  1219. package/dist/node_modules/d3-format/src/formatRounded.js.map +0 -1
  1220. package/dist/node_modules/d3-format/src/formatSpecifier.js +0 -29
  1221. package/dist/node_modules/d3-format/src/formatSpecifier.js.map +0 -1
  1222. package/dist/node_modules/d3-format/src/formatTrim.js +0 -20
  1223. package/dist/node_modules/d3-format/src/formatTrim.js.map +0 -1
  1224. package/dist/node_modules/d3-format/src/formatTypes.js +0 -23
  1225. package/dist/node_modules/d3-format/src/formatTypes.js.map +0 -1
  1226. package/dist/node_modules/d3-format/src/identity.js +0 -8
  1227. package/dist/node_modules/d3-format/src/identity.js.map +0 -1
  1228. package/dist/node_modules/d3-format/src/locale.js +0 -86
  1229. package/dist/node_modules/d3-format/src/locale.js.map +0 -1
  1230. package/dist/node_modules/d3-format/src/precisionFixed.js +0 -9
  1231. package/dist/node_modules/d3-format/src/precisionFixed.js.map +0 -1
  1232. package/dist/node_modules/d3-format/src/precisionPrefix.js +0 -9
  1233. package/dist/node_modules/d3-format/src/precisionPrefix.js.map +0 -1
  1234. package/dist/node_modules/d3-format/src/precisionRound.js +0 -9
  1235. package/dist/node_modules/d3-format/src/precisionRound.js.map +0 -1
  1236. package/dist/node_modules/d3-interpolate/src/array.js +0 -15
  1237. package/dist/node_modules/d3-interpolate/src/array.js.map +0 -1
  1238. package/dist/node_modules/d3-interpolate/src/basis.js +0 -16
  1239. package/dist/node_modules/d3-interpolate/src/basis.js.map +0 -1
  1240. package/dist/node_modules/d3-interpolate/src/basisClosed.js +0 -13
  1241. package/dist/node_modules/d3-interpolate/src/basisClosed.js.map +0 -1
  1242. package/dist/node_modules/d3-interpolate/src/color.js +0 -25
  1243. package/dist/node_modules/d3-interpolate/src/color.js.map +0 -1
  1244. package/dist/node_modules/d3-interpolate/src/constant.js +0 -6
  1245. package/dist/node_modules/d3-interpolate/src/constant.js.map +0 -1
  1246. package/dist/node_modules/d3-interpolate/src/date.js +0 -11
  1247. package/dist/node_modules/d3-interpolate/src/date.js.map +0 -1
  1248. package/dist/node_modules/d3-interpolate/src/number.js +0 -10
  1249. package/dist/node_modules/d3-interpolate/src/number.js.map +0 -1
  1250. package/dist/node_modules/d3-interpolate/src/numberArray.js +0 -16
  1251. package/dist/node_modules/d3-interpolate/src/numberArray.js.map +0 -1
  1252. package/dist/node_modules/d3-interpolate/src/object.js +0 -14
  1253. package/dist/node_modules/d3-interpolate/src/object.js.map +0 -1
  1254. package/dist/node_modules/d3-interpolate/src/piecewise.js +0 -14
  1255. package/dist/node_modules/d3-interpolate/src/piecewise.js.map +0 -1
  1256. package/dist/node_modules/d3-interpolate/src/rgb.js +0 -19
  1257. package/dist/node_modules/d3-interpolate/src/rgb.js.map +0 -1
  1258. package/dist/node_modules/d3-interpolate/src/round.js +0 -10
  1259. package/dist/node_modules/d3-interpolate/src/round.js.map +0 -1
  1260. package/dist/node_modules/d3-interpolate/src/string.js +0 -28
  1261. package/dist/node_modules/d3-interpolate/src/string.js.map +0 -1
  1262. package/dist/node_modules/d3-interpolate/src/value.js +0 -18
  1263. package/dist/node_modules/d3-interpolate/src/value.js.map +0 -1
  1264. package/dist/node_modules/d3-path/src/path.js.map +0 -1
  1265. package/dist/node_modules/d3-scale/src/band.js +0 -52
  1266. package/dist/node_modules/d3-scale/src/band.js.map +0 -1
  1267. package/dist/node_modules/d3-scale/src/constant.js +0 -10
  1268. package/dist/node_modules/d3-scale/src/constant.js.map +0 -1
  1269. package/dist/node_modules/d3-scale/src/continuous.js +0 -73
  1270. package/dist/node_modules/d3-scale/src/continuous.js.map +0 -1
  1271. package/dist/node_modules/d3-scale/src/diverging.js +0 -82
  1272. package/dist/node_modules/d3-scale/src/diverging.js.map +0 -1
  1273. package/dist/node_modules/d3-scale/src/identity.js +0 -20
  1274. package/dist/node_modules/d3-scale/src/identity.js.map +0 -1
  1275. package/dist/node_modules/d3-scale/src/init.js +0 -29
  1276. package/dist/node_modules/d3-scale/src/init.js.map +0 -1
  1277. package/dist/node_modules/d3-scale/src/linear.js +0 -36
  1278. package/dist/node_modules/d3-scale/src/linear.js.map +0 -1
  1279. package/dist/node_modules/d3-scale/src/log.js +0 -77
  1280. package/dist/node_modules/d3-scale/src/log.js.map +0 -1
  1281. package/dist/node_modules/d3-scale/src/nice.js +0 -10
  1282. package/dist/node_modules/d3-scale/src/nice.js.map +0 -1
  1283. package/dist/node_modules/d3-scale/src/number.js +0 -8
  1284. package/dist/node_modules/d3-scale/src/number.js.map +0 -1
  1285. package/dist/node_modules/d3-scale/src/ordinal.js +0 -31
  1286. package/dist/node_modules/d3-scale/src/ordinal.js.map +0 -1
  1287. package/dist/node_modules/d3-scale/src/pow.js +0 -37
  1288. package/dist/node_modules/d3-scale/src/pow.js.map +0 -1
  1289. package/dist/node_modules/d3-scale/src/quantile.js +0 -37
  1290. package/dist/node_modules/d3-scale/src/quantile.js.map +0 -1
  1291. package/dist/node_modules/d3-scale/src/quantize.js +0 -33
  1292. package/dist/node_modules/d3-scale/src/quantize.js.map +0 -1
  1293. package/dist/node_modules/d3-scale/src/radial.js +0 -39
  1294. package/dist/node_modules/d3-scale/src/radial.js.map +0 -1
  1295. package/dist/node_modules/d3-scale/src/sequential.js +0 -67
  1296. package/dist/node_modules/d3-scale/src/sequential.js.map +0 -1
  1297. package/dist/node_modules/d3-scale/src/sequentialQuantile.js +0 -30
  1298. package/dist/node_modules/d3-scale/src/sequentialQuantile.js.map +0 -1
  1299. package/dist/node_modules/d3-scale/src/symlog.js +0 -30
  1300. package/dist/node_modules/d3-scale/src/symlog.js.map +0 -1
  1301. package/dist/node_modules/d3-scale/src/threshold.js +0 -25
  1302. package/dist/node_modules/d3-scale/src/threshold.js.map +0 -1
  1303. package/dist/node_modules/d3-scale/src/tickFormat.js +0 -31
  1304. package/dist/node_modules/d3-scale/src/tickFormat.js.map +0 -1
  1305. package/dist/node_modules/d3-scale/src/time.js +0 -47
  1306. package/dist/node_modules/d3-scale/src/time.js.map +0 -1
  1307. package/dist/node_modules/d3-scale/src/utcTime.js +0 -19
  1308. package/dist/node_modules/d3-scale/src/utcTime.js.map +0 -1
  1309. package/dist/node_modules/d3-shape/src/area.js +0 -55
  1310. package/dist/node_modules/d3-shape/src/area.js.map +0 -1
  1311. package/dist/node_modules/d3-shape/src/array.js +0 -8
  1312. package/dist/node_modules/d3-shape/src/array.js.map +0 -1
  1313. package/dist/node_modules/d3-shape/src/constant.js +0 -10
  1314. package/dist/node_modules/d3-shape/src/constant.js.map +0 -1
  1315. package/dist/node_modules/d3-shape/src/curve/basis.js +0 -49
  1316. package/dist/node_modules/d3-shape/src/curve/basis.js.map +0 -1
  1317. package/dist/node_modules/d3-shape/src/curve/basisClosed.js +0 -50
  1318. package/dist/node_modules/d3-shape/src/curve/basisClosed.js.map +0 -1
  1319. package/dist/node_modules/d3-shape/src/curve/basisOpen.js +0 -46
  1320. package/dist/node_modules/d3-shape/src/curve/basisOpen.js.map +0 -1
  1321. package/dist/node_modules/d3-shape/src/curve/bump.js +0 -40
  1322. package/dist/node_modules/d3-shape/src/curve/bump.js.map +0 -1
  1323. package/dist/node_modules/d3-shape/src/curve/linear.js +0 -36
  1324. package/dist/node_modules/d3-shape/src/curve/linear.js.map +0 -1
  1325. package/dist/node_modules/d3-shape/src/curve/linearClosed.js +0 -25
  1326. package/dist/node_modules/d3-shape/src/curve/linearClosed.js.map +0 -1
  1327. package/dist/node_modules/d3-shape/src/curve/monotone.js +0 -94
  1328. package/dist/node_modules/d3-shape/src/curve/monotone.js.map +0 -1
  1329. package/dist/node_modules/d3-shape/src/curve/natural.js +0 -39
  1330. package/dist/node_modules/d3-shape/src/curve/natural.js.map +0 -1
  1331. package/dist/node_modules/d3-shape/src/curve/step.js +0 -47
  1332. package/dist/node_modules/d3-shape/src/curve/step.js.map +0 -1
  1333. package/dist/node_modules/d3-shape/src/line.js +0 -30
  1334. package/dist/node_modules/d3-shape/src/line.js.map +0 -1
  1335. package/dist/node_modules/d3-shape/src/math.js +0 -8
  1336. package/dist/node_modules/d3-shape/src/math.js.map +0 -1
  1337. package/dist/node_modules/d3-shape/src/noop.js +0 -6
  1338. package/dist/node_modules/d3-shape/src/noop.js.map +0 -1
  1339. package/dist/node_modules/d3-shape/src/offset/expand.js +0 -15
  1340. package/dist/node_modules/d3-shape/src/offset/expand.js.map +0 -1
  1341. package/dist/node_modules/d3-shape/src/offset/none.js +0 -8
  1342. package/dist/node_modules/d3-shape/src/offset/none.js.map +0 -1
  1343. package/dist/node_modules/d3-shape/src/offset/silhouette.js +0 -15
  1344. package/dist/node_modules/d3-shape/src/offset/silhouette.js.map +0 -1
  1345. package/dist/node_modules/d3-shape/src/offset/wiggle.js +0 -21
  1346. package/dist/node_modules/d3-shape/src/offset/wiggle.js.map +0 -1
  1347. package/dist/node_modules/d3-shape/src/order/none.js +0 -9
  1348. package/dist/node_modules/d3-shape/src/order/none.js.map +0 -1
  1349. package/dist/node_modules/d3-shape/src/path.js +0 -19
  1350. package/dist/node_modules/d3-shape/src/path.js.map +0 -1
  1351. package/dist/node_modules/d3-shape/src/point.js +0 -11
  1352. package/dist/node_modules/d3-shape/src/point.js.map +0 -1
  1353. package/dist/node_modules/d3-shape/src/stack.js +0 -34
  1354. package/dist/node_modules/d3-shape/src/stack.js.map +0 -1
  1355. package/dist/node_modules/d3-shape/src/symbol/circle.js +0 -10
  1356. package/dist/node_modules/d3-shape/src/symbol/circle.js.map +0 -1
  1357. package/dist/node_modules/d3-shape/src/symbol/cross.js +0 -10
  1358. package/dist/node_modules/d3-shape/src/symbol/cross.js.map +0 -1
  1359. package/dist/node_modules/d3-shape/src/symbol/diamond.js +0 -10
  1360. package/dist/node_modules/d3-shape/src/symbol/diamond.js.map +0 -1
  1361. package/dist/node_modules/d3-shape/src/symbol/square.js +0 -10
  1362. package/dist/node_modules/d3-shape/src/symbol/square.js.map +0 -1
  1363. package/dist/node_modules/d3-shape/src/symbol/star.js +0 -15
  1364. package/dist/node_modules/d3-shape/src/symbol/star.js.map +0 -1
  1365. package/dist/node_modules/d3-shape/src/symbol/triangle.js +0 -10
  1366. package/dist/node_modules/d3-shape/src/symbol/triangle.js.map +0 -1
  1367. package/dist/node_modules/d3-shape/src/symbol/wye.js +0 -10
  1368. package/dist/node_modules/d3-shape/src/symbol/wye.js.map +0 -1
  1369. package/dist/node_modules/d3-shape/src/symbol.js +0 -23
  1370. package/dist/node_modules/d3-shape/src/symbol.js.map +0 -1
  1371. package/dist/node_modules/d3-time/src/day.js +0 -21
  1372. package/dist/node_modules/d3-time/src/day.js.map +0 -1
  1373. package/dist/node_modules/d3-time/src/duration.js +0 -6
  1374. package/dist/node_modules/d3-time/src/duration.js.map +0 -1
  1375. package/dist/node_modules/d3-time/src/hour.js +0 -19
  1376. package/dist/node_modules/d3-time/src/hour.js.map +0 -1
  1377. package/dist/node_modules/d3-time/src/interval.js +0 -28
  1378. package/dist/node_modules/d3-time/src/interval.js.map +0 -1
  1379. package/dist/node_modules/d3-time/src/millisecond.js +0 -14
  1380. package/dist/node_modules/d3-time/src/millisecond.js.map +0 -1
  1381. package/dist/node_modules/d3-time/src/minute.js +0 -19
  1382. package/dist/node_modules/d3-time/src/minute.js.map +0 -1
  1383. package/dist/node_modules/d3-time/src/month.js +0 -18
  1384. package/dist/node_modules/d3-time/src/month.js.map +0 -1
  1385. package/dist/node_modules/d3-time/src/second.js +0 -13
  1386. package/dist/node_modules/d3-time/src/second.js.map +0 -1
  1387. package/dist/node_modules/d3-time/src/ticks.js +0 -125
  1388. package/dist/node_modules/d3-time/src/ticks.js.map +0 -1
  1389. package/dist/node_modules/d3-time/src/week.js +0 -25
  1390. package/dist/node_modules/d3-time/src/week.js.map +0 -1
  1391. package/dist/node_modules/d3-time/src/year.js +0 -26
  1392. package/dist/node_modules/d3-time/src/year.js.map +0 -1
  1393. package/dist/node_modules/d3-time-format/src/defaultLocale.js +0 -62
  1394. package/dist/node_modules/d3-time-format/src/defaultLocale.js.map +0 -1
  1395. package/dist/node_modules/d3-time-format/src/locale.js.map +0 -1
  1396. package/dist/node_modules/internmap/src/index.js +0 -40
  1397. package/dist/node_modules/internmap/src/index.js.map +0 -1
  1398. package/dist/node_modules/rxjs/node_modules/tslib/tslib.es6.js.map +0 -1
  1399. package/dist/translations/en.d.ts.map +0 -1
  1400. package/dist/utils/nativeBridge.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"NodeLifecyclePage.js","names":[],"sources":["../../../src/devportal/pages/NodeLifecyclePage.tsx"],"sourcesContent":["/**\n * NodeLifecyclePage — \"Publish a custom node\" (BOFF-4076).\n *\n * One page that walks a custom-node version through its whole lifecycle:\n * upload ZIP → validate manifest → run tests → approval → deploy. It is a view\n * over the ApplicationVersion that global-devportal-svc already maintains (see\n * utils/nodeLifecycle.ts), plus the three developer actions the lifecycle\n * needs: upload or replace the package, publish a workspace-private node to\n * the developer's organization, and submit a store node for platform review.\n *\n * The page polls while the platform is working (validating, building,\n * testing, reviewing) so each stage flips as soon as the service records it.\n */\nimport type { FC, ReactNode } from \"react\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useParams } from \"react-router\";\nimport {\n AlertTriangle,\n BookOpen,\n Building2,\n Check,\n CheckCircle2,\n ChevronDown,\n ChevronUp,\n Copy,\n FileCode2,\n FlaskConical,\n Globe,\n Loader2,\n Lock,\n MinusCircle,\n Package,\n Rocket,\n Server,\n ShieldCheck,\n Upload,\n XCircle,\n} from \"lucide-react\";\n\nimport { PageLayout } from \"../components/PageLayout\";\nimport { LoadingState } from \"../components/LoadingState\";\nimport { EmptyState } from \"../components/EmptyState\";\nimport { cn } from \"../utils/cn\";\nimport { useTr } from \"../utils/i18n\";\nimport {\n useGetApplicationQuery,\n useUpdateApplicationVersionMutation,\n usePublishApplicationVersionMutation,\n usePublishApplicationVersionToOrganizationMutation,\n type ApplicationVersionFieldsFragment,\n} from \"../hooks\";\nimport { DEVPORTAL_PERMISSIONS } from \"../constants/permissions\";\nimport { useDevportalPermission } from \"../hooks/usePermission\";\nimport { useDevportal } from \"../providers/DevportalProvider\";\nimport { usePackageUpload } from \"../hooks/usePackageUpload\";\nimport {\n deployBlocker,\n deriveNodeLifecycle,\n visibilityForApp,\n type CheckStatus,\n type DeployBlocker,\n type LifecycleCheck,\n type LifecycleStep,\n type NodeLifecycle,\n} from \"../utils/nodeLifecycle\";\n\n/** Poll every 10 s while the platform is still working on the version. */\nexport const LIFECYCLE_POLL_INTERVAL_MS = 10_000;\n\ntype Tr = ReturnType<typeof useTr>;\n\nconst STEP_LABELS: Record<LifecycleStep[\"id\"], [string, string]> = {\n upload: [\"devportal.nodeLifecycle.step.upload\", \"Upload ZIP\"],\n validate: [\"devportal.nodeLifecycle.step.validate\", \"Validate manifest\"],\n test: [\"devportal.nodeLifecycle.step.test\", \"Run tests\"],\n approval: [\"devportal.nodeLifecycle.step.approval\", \"Approval\"],\n deploy: [\"devportal.nodeLifecycle.step.deploy\", \"Deploy\"],\n};\n\nconst STEP_REASONS: Record<string, string> = {\n uploaded: \"Completed\",\n noPackage: \"Upload the node package\",\n waitingForPackage: \"Pending\",\n passed: \"Completed\",\n failed: \"Failed — see checks\",\n validating: \"In progress\",\n notValidated: \"Upload the package again to validate it\",\n waitingForValidation: \"Pending\",\n building: \"Building sandbox image\",\n buildFailed: \"Build failed\",\n testing: \"Testing operations\",\n testsFailed: \"Tests failed\",\n testsSkipped: \"Completed (tests not run here)\",\n testsPassed: \"Completed\",\n built: \"Completed\",\n organization: \"Approved by your organization\",\n approved: \"Approved\",\n inReview: \"Awaiting platform review\",\n rejected: \"Changes requested\",\n waitingForTests: \"Pending\",\n readyForOrganization: \"Auto-approved when you deploy\",\n readyToSubmit: \"Submit for platform review\",\n deprecated: \"Deprecated\",\n store: \"Live in the Node Store\",\n deployedToOrganization: \"Installable in your organization's workspaces\",\n ready: \"Ready to deploy\",\n waitingForApproval: \"Pending\",\n};\n\nconst CHECK_META: Record<\n LifecycleCheck[\"id\"],\n { icon: ReactNode; key: string; label: string }\n> = {\n structure: {\n icon: <Package size={16} />,\n key: \"devportal.nodeLifecycle.check.structure\",\n label: \"Package structure\",\n },\n manifest: {\n icon: <FileCode2 size={16} />,\n key: \"devportal.nodeLifecycle.check.manifest\",\n label: \"Manifest & operations\",\n },\n security: {\n icon: <ShieldCheck size={16} />,\n key: \"devportal.nodeLifecycle.check.security\",\n label: \"Security scan\",\n },\n build: {\n icon: <Server size={16} />,\n key: \"devportal.nodeLifecycle.check.build\",\n label: \"Sandbox image build\",\n },\n tests: {\n icon: <FlaskConical size={16} />,\n key: \"devportal.nodeLifecycle.check.tests\",\n label: \"Automated operation tests\",\n },\n};\n\nconst CHECK_BADGE: Record<CheckStatus, { label: string; className: string }> = {\n pass: {\n label: \"PASS\",\n className: \"bg-status-success-bg-subtle text-status-success-text\",\n },\n warn: {\n label: \"REVIEW\",\n className: \"bg-status-warning-bg-subtle text-status-warning-text\",\n },\n fail: {\n label: \"FAIL\",\n className: \"bg-status-error-bg-subtle text-status-error-text\",\n },\n running: {\n label: \"RUNNING\",\n className: \"bg-status-info-bg-subtle text-status-info-text\",\n },\n not_run: {\n label: \"NOT RUN\",\n className: \"bg-bg-sunken text-text-secondary\",\n },\n};\n\nconst BLOCKER_COPY: Record<DeployBlocker, [string, string]> = {\n noPermission: [\n \"devportal.nodeLifecycle.blocker.noPermission\",\n \"You do not have permission to publish versions of this node.\",\n ],\n notDraft: [\n \"devportal.nodeLifecycle.blocker.notDraft\",\n \"This version has already been submitted or deployed. Create a new version to ship a change.\",\n ],\n visibilityMismatch: [\n \"devportal.nodeLifecycle.blocker.visibilityMismatch\",\n \"This node's visibility does not allow that. Change it under Edit application.\",\n ],\n noPackage: [\n \"devportal.nodeLifecycle.blocker.noPackage\",\n \"Upload the node package first.\",\n ],\n validationNotPassed: [\n \"devportal.nodeLifecycle.blocker.validationNotPassed\",\n \"The package must pass validation first.\",\n ],\n buildNotReady: [\n \"devportal.nodeLifecycle.blocker.buildNotReady\",\n \"Waiting for the sandbox image to build.\",\n ],\n testsNotPassed: [\n \"devportal.nodeLifecycle.blocker.testsNotPassed\",\n \"The operation tests must finish without failures first.\",\n ],\n noWorkspace: [\n \"devportal.nodeLifecycle.blocker.noWorkspace\",\n \"Open the developer portal from a workspace of your organization to publish privately.\",\n ],\n pendingVersion: [\n \"devportal.nodeLifecycle.blocker.pendingVersion\",\n \"Another version of this node is already in review.\",\n ],\n};\n\nfunction stepReason(tr: Tr, step: LifecycleStep): string {\n return tr(\n `devportal.nodeLifecycle.reason.${step.reason}`,\n STEP_REASONS[step.reason] ?? step.reason,\n );\n}\n\nconst StepIndicator: FC<{ step: LifecycleStep; index: number }> = ({\n step,\n index,\n}) => {\n const base =\n \"flex h-11 w-11 shrink-0 items-center justify-center rounded-full border-2 text-sm font-semibold\";\n switch (step.status) {\n case \"complete\":\n return (\n <span\n className={cn(\n base,\n \"border-status-success-text bg-status-success-bg-subtle text-status-success-text\",\n )}\n >\n <Check size={20} />\n </span>\n );\n case \"failed\":\n return (\n <span\n className={cn(\n base,\n \"border-status-error-text bg-status-error-bg-subtle text-status-error-text\",\n )}\n >\n <XCircle size={20} />\n </span>\n );\n case \"in_progress\":\n return (\n <span\n className={cn(\n base,\n \"border-action-primary-bg bg-action-primary-bg text-action-primary-text\",\n )}\n >\n <Loader2 size={18} className=\"animate-spin\" />\n </span>\n );\n case \"action\":\n return (\n <span\n className={cn(\n base,\n \"border-action-primary-bg bg-action-primary-bg text-action-primary-text\",\n )}\n >\n {index + 1}\n </span>\n );\n default:\n return (\n <span className={cn(base, \"border-border-seam text-text-secondary\")}>\n {index + 1}\n </span>\n );\n }\n};\n\nconst Stepper: FC<{ lifecycle: NodeLifecycle; tr: Tr }> = ({\n lifecycle,\n tr,\n}) => (\n <ol\n className=\"grid grid-cols-1 gap-4 sm:grid-cols-5\"\n data-testid=\"node-lifecycle-stepper\"\n >\n {lifecycle.steps.map((step, index) => {\n const [key, fallback] = STEP_LABELS[step.id];\n const tone =\n step.status === \"complete\"\n ? \"text-status-success-text\"\n : step.status === \"failed\"\n ? \"text-status-error-text\"\n : step.status === \"in_progress\" || step.status === \"action\"\n ? \"text-status-info-text\"\n : \"text-text-secondary\";\n return (\n <li\n key={step.id}\n className=\"flex items-center gap-3 sm:flex-col sm:text-center\"\n data-step={step.id}\n data-status={step.status}\n aria-current={index === lifecycle.currentIndex ? \"step\" : undefined}\n >\n <StepIndicator step={step} index={index} />\n <div className=\"flex flex-col\">\n <span className=\"text-sm font-semibold text-text-primary\">\n {index + 1}. {tr(key, fallback)}\n </span>\n <span className={cn(\"text-xs\", tone)}>{stepReason(tr, step)}</span>\n </div>\n </li>\n );\n })}\n </ol>\n);\n\nfunction checkDetail(tr: Tr, check: LifecycleCheck): string | null {\n if (check.id === \"tests\" && check.status === \"pass\" && check.detail) {\n const [passed, total] = check.detail.split(\"/\");\n return tr(\n \"devportal.nodeLifecycle.testsPassing\",\n \"{{passed}} / {{total}} passing\",\n { passed: passed ?? \"0\", total: total ?? \"0\" },\n );\n }\n if (check.detail === \"notValidated\") {\n return tr(\n \"devportal.nodeLifecycle.notValidated\",\n \"Uploaded before validation existed\",\n );\n }\n if (check.detail === \"blockedByValidation\") {\n return tr(\n \"devportal.nodeLifecycle.blockedByValidation\",\n \"Not built: the package failed validation\",\n );\n }\n return check.detail;\n}\n\nconst ChecksPanel: FC<{ lifecycle: NodeLifecycle; tr: Tr }> = ({\n lifecycle,\n tr,\n}) => {\n const [showLogs, setShowLogs] = useState(false);\n const smoke = lifecycle.smoke;\n const operations =\n smoke.kind === \"passed\" ||\n smoke.kind === \"failed\" ||\n smoke.kind === \"skipped\"\n ? smoke.operations\n : [];\n const finishedAt =\n smoke.kind === \"passed\" ||\n smoke.kind === \"failed\" ||\n smoke.kind === \"skipped\"\n ? smoke.finishedAt\n : null;\n\n return (\n <section\n className=\"flex flex-col rounded-card border border-border-seam bg-bg-surface\"\n data-testid=\"node-lifecycle-checks\"\n >\n <h2 className=\"border-b border-border-seam px-5 py-4 text-base font-semibold\">\n {tr(\"devportal.nodeLifecycle.checks\", \"Checks\")}\n </h2>\n <ul className=\"divide-y divide-border-seam\">\n {lifecycle.checks.map((check) => {\n const meta = CHECK_META[check.id];\n const badge = CHECK_BADGE[check.status];\n const detail = checkDetail(tr, check);\n return (\n <li\n key={check.id}\n className=\"px-5 py-3\"\n data-check={check.id}\n data-status={check.status}\n >\n <div className=\"flex items-center gap-3\">\n <span className=\"text-text-secondary\">{meta.icon}</span>\n <span className=\"flex-1 text-sm font-medium\">\n {tr(meta.key, meta.label)}\n {detail && (\n <span className=\"ml-2 text-xs font-normal text-text-secondary\">\n {detail}\n </span>\n )}\n </span>\n <span\n className={cn(\n \"inline-flex items-center gap-1 rounded-md px-2 py-0.5 text-xs font-semibold\",\n badge.className,\n )}\n >\n {check.status === \"running\" && (\n <Loader2 size={11} className=\"animate-spin\" />\n )}\n {tr(\n `devportal.nodeLifecycle.badge.${check.status}`,\n badge.label,\n )}\n </span>\n </div>\n {check.issues.length > 0 && (\n <ul className=\"mt-2 space-y-1 pl-7\">\n {check.issues.map((issue, index) => (\n <li\n key={`${issue.code}-${issue.path}-${index}`}\n className=\"text-xs leading-snug\"\n >\n {issue.path && (\n <code className=\"mr-1 rounded bg-bg-sunken px-1 py-0.5 font-mono text-text-primary\">\n {issue.path}\n </code>\n )}\n <span\n className={\n issue.severity === \"error\"\n ? \"text-status-error-text\"\n : \"text-status-warning-text\"\n }\n >\n {issue.message}\n </span>\n </li>\n ))}\n </ul>\n )}\n </li>\n );\n })}\n </ul>\n <div className=\"mt-auto border-t border-border-seam px-5 py-3\">\n <div className=\"flex items-center justify-between gap-2 text-xs text-text-secondary\">\n <span>\n {finishedAt\n ? tr(\n \"devportal.nodeLifecycle.testsFinished\",\n \"Tests finished {{time}}\",\n { time: new Date(finishedAt).toLocaleString() },\n )\n : tr(\n \"devportal.nodeLifecycle.testsNotFinished\",\n \"No test run recorded yet\",\n )}\n </span>\n {operations.length > 0 && (\n <button\n type=\"button\"\n className=\"inline-flex items-center gap-1 font-medium text-status-info-text hover:underline\"\n onClick={() => setShowLogs((value) => !value)}\n aria-expanded={showLogs}\n >\n {showLogs\n ? tr(\"devportal.nodeLifecycle.hideTestLogs\", \"Hide test logs\")\n : tr(\"devportal.nodeLifecycle.viewTestLogs\", \"View test logs\")}\n {showLogs ? <ChevronUp size={12} /> : <ChevronDown size={12} />}\n </button>\n )}\n </div>\n {showLogs && (\n <ul\n className=\"mt-3 space-y-1 rounded-md bg-bg-sunken p-3 font-mono text-xs\"\n data-testid=\"node-lifecycle-test-logs\"\n >\n {operations.map((op, index) => (\n <li key={`${op.name}-${index}`} className=\"flex gap-2\">\n {op.status === \"PASS\" ? (\n <CheckCircle2\n size={12}\n className=\"mt-0.5 shrink-0 text-status-success-text\"\n />\n ) : op.status === \"SKIP\" ? (\n <MinusCircle\n size={12}\n className=\"mt-0.5 shrink-0 text-text-secondary\"\n />\n ) : (\n <XCircle\n size={12}\n className=\"mt-0.5 shrink-0 text-status-error-text\"\n />\n )}\n <span className=\"text-text-primary\">{op.name}</span>\n <span className=\"text-text-secondary\">\n {op.status} · {op.durationMs} ms\n </span>\n {(op.error ?? op.detail) && (\n <span className=\"break-all text-text-secondary\">\n {op.error ?? op.detail}\n </span>\n )}\n </li>\n ))}\n </ul>\n )}\n </div>\n </section>\n );\n};\n\nconst ManifestPreview: FC<{ manifest: unknown; tr: Tr }> = ({\n manifest,\n tr,\n}) => {\n const [copied, setCopied] = useState(false);\n const text = useMemo(\n () => (manifest ? JSON.stringify(manifest, null, 2) : \"\"),\n [manifest],\n );\n const lines = text ? text.split(\"\\n\") : [];\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(text);\n setCopied(true);\n window.setTimeout(() => setCopied(false), 2000);\n } catch {\n setCopied(false);\n }\n };\n\n return (\n <section\n className=\"flex min-w-0 flex-col rounded-card border border-border-seam bg-bg-surface\"\n data-testid=\"node-lifecycle-manifest\"\n >\n <div className=\"flex items-center justify-between gap-2 border-b border-border-seam px-5 py-3\">\n <h2 className=\"text-base font-semibold\">\n {tr(\"devportal.nodeLifecycle.manifestPreview\", \"Manifest preview\")}{\" \"}\n <span className=\"font-normal text-text-secondary\">\n (manifest.json)\n </span>\n </h2>\n {text && (\n <button\n type=\"button\"\n onClick={handleCopy}\n className=\"inline-flex items-center gap-1.5 rounded-md border border-border-seam px-3 py-1.5 text-xs font-medium hover:bg-accent\"\n >\n {copied ? <Check size={13} /> : <Copy size={13} />}\n {copied\n ? tr(\"devportal.copied\", \"Copied\")\n : tr(\"devportal.copy\", \"Copy\")}\n </button>\n )}\n </div>\n {lines.length > 0 ? (\n <pre className=\"max-h-[28rem] flex-1 overflow-auto px-0 py-3 font-mono text-xs leading-5\">\n {lines.map((line, index) => (\n <div key={index} className=\"flex\">\n <span className=\"w-10 shrink-0 select-none pr-3 text-right text-text-tertiary\">\n {index + 1}\n </span>\n <span className=\"whitespace-pre text-text-primary\">{line}</span>\n </div>\n ))}\n </pre>\n ) : (\n <p className=\"px-5 py-6 text-sm text-text-secondary\">\n {tr(\n \"devportal.nodeLifecycle.noManifest\",\n \"This version has no manifest yet. Add one from the versions page.\",\n )}\n </p>\n )}\n </section>\n );\n};\n\nexport const NodeLifecyclePage: FC = () => {\n const tr = useTr();\n const { appId, versionId } = useParams<{\n appId: string;\n versionId: string;\n }>();\n const {\n basePath,\n navigate,\n workspaceId,\n workspacesGatewayUrl,\n authToken,\n getWorkspaceToken,\n } = useDevportal();\n const { allowed: canPublish } = useDevportalPermission(\n DEVPORTAL_PERMISSIONS.APP_VERSION_PUBLISH,\n );\n const { allowed: canUpdate } = useDevportalPermission(\n DEVPORTAL_PERMISSIONS.APP_VERSION_UPDATE,\n );\n\n const { data, loading, error, startPolling, stopPolling } =\n useGetApplicationQuery({\n variables: { id: appId ?? \"\" },\n skip: !appId,\n fetchPolicy: \"cache-and-network\",\n });\n\n const app = data?.application;\n const versions: ApplicationVersionFieldsFragment[] = useMemo(\n () =>\n app?.versions?.edges?.map(\n (edge: { node: ApplicationVersionFieldsFragment }) => edge.node,\n ) ?? [],\n [app?.versions],\n );\n const version = versions.find((v) => v.id === versionId) ?? null;\n const appVisibility = app?.visibility ?? null;\n const visibility = visibilityForApp(appVisibility);\n\n const lifecycle = useMemo(\n () => (version ? deriveNodeLifecycle(version, visibility) : null),\n [version, visibility],\n );\n\n // Poll only while the platform is working; stop once every stage settles.\n const busy = lifecycle?.busy ?? false;\n useEffect(() => {\n if (!busy) return undefined;\n startPolling(LIFECYCLE_POLL_INTERVAL_MS);\n return () => stopPolling();\n }, [busy, startPolling, stopPolling]);\n\n const otherVersionPending = versions.some(\n (v) => v.id !== versionId && v.status === \"pending_review\",\n );\n\n // Wait for the refetch so the page shows the new package's (pending)\n // validation before the replacement counts as finished.\n const [updateVersion] = useUpdateApplicationVersionMutation({\n refetchQueries: [\"GetApplication\"],\n awaitRefetchQueries: true,\n });\n const [submitForReview, { loading: submitting }] =\n usePublishApplicationVersionMutation({\n refetchQueries: [\"GetApplication\"],\n });\n const [publishToOrganization, { loading: publishingPrivately }] =\n usePublishApplicationVersionToOrganizationMutation({\n refetchQueries: [\"GetApplication\"],\n });\n const {\n upload: uploadPackage,\n uploading,\n progress,\n error: uploadError,\n } = usePackageUpload(\n workspacesGatewayUrl,\n authToken,\n workspaceId,\n getWorkspaceToken,\n );\n const zipInputRef = useRef<HTMLInputElement>(null);\n const [actionError, setActionError] = useState<string | null>(null);\n const [actionSuccess, setActionSuccess] = useState<string | null>(null);\n const [copiedId, setCopiedId] = useState(false);\n // True from the moment a package is picked until the version carries it and\n // has been re-read. Deploy stays disabled meanwhile: the readiness shown is\n // still the old package's, and deploying now would ship the old package.\n const [replacingPackage, setReplacingPackage] = useState(false);\n\n const go = useCallback(\n (path: string) => navigate?.(`${basePath}${path}`),\n [navigate, basePath],\n );\n\n const handlePackageSelected = async (\n event: React.ChangeEvent<HTMLInputElement>,\n ) => {\n const file = event.target.files?.[0];\n event.target.value = \"\";\n if (!file || !version) return;\n setActionError(null);\n setActionSuccess(null);\n if (!file.name.toLowerCase().endsWith(\".zip\")) {\n setActionError(\n tr(\n \"devportal.nodeLifecycle.zipOnly\",\n \"Upload the node as a .zip package.\",\n ),\n );\n return;\n }\n setReplacingPackage(true);\n try {\n const uploaded = await uploadPackage(file);\n const result = await updateVersion({\n variables: {\n id: version.id,\n input: {\n packageUrl: uploaded.downloadUrl,\n packageSize: String(file.size),\n },\n },\n });\n if (result.error || !result.data?.updateApplicationVersion) {\n throw (\n result.error ??\n new Error(\n tr(\n \"devportal.nodeLifecycle.uploadFailed\",\n \"Failed to attach the package to this version\",\n ),\n )\n );\n }\n setActionSuccess(\n tr(\n \"devportal.nodeLifecycle.uploaded\",\n \"Package uploaded. Validation and tests start automatically.\",\n ),\n );\n } catch (err) {\n setActionError(\n err instanceof Error\n ? err.message\n : tr(\n \"devportal.nodeLifecycle.uploadFailed\",\n \"Failed to attach the package to this version\",\n ),\n );\n } finally {\n setReplacingPackage(false);\n }\n };\n\n const storeNeedsAppSubmission =\n visibility === \"store\" && app?.status !== \"PUBLISHED\";\n\n const blocker =\n version && lifecycle\n ? deployBlocker({\n lifecycle,\n version,\n visibility,\n appVisibility,\n workspaceId,\n otherVersionPending,\n canPublish,\n })\n : \"notDraft\";\n\n const handleDeploy = async () => {\n if (!version || blocker || replacingPackage) return;\n setActionError(null);\n setActionSuccess(null);\n if (storeNeedsAppSubmission) {\n // A node's first store release is submitted together with its listing\n // and pricing from the publish page; later versions are submitted here.\n go(`/apps/${appId}/publish`);\n return;\n }\n try {\n if (visibility === \"private\") {\n if (!workspaceId) return;\n const result = await publishToOrganization({\n variables: { id: version.id, workspaceId },\n });\n if (\n result.error ||\n !result.data?.publishApplicationVersionToOrganization\n ) {\n throw (\n result.error ??\n new Error(\n tr(\n \"devportal.versionPublishToOrganizationFailed\",\n \"Failed to publish the version to your organization\",\n ),\n )\n );\n }\n setActionSuccess(\n tr(\n \"devportal.nodeLifecycle.deployedPrivately\",\n \"Deployed to your organization. Workspace admins can now install it from the Node Store.\",\n ),\n );\n } else {\n const result = await submitForReview({\n variables: { id: version.id },\n });\n if (result.error || !result.data?.publishApplicationVersion) {\n throw (\n result.error ??\n new Error(\n tr(\n \"devportal.versionPublishFailed\",\n \"Failed to submit version for review\",\n ),\n )\n );\n }\n setActionSuccess(\n tr(\n \"devportal.nodeLifecycle.submitted\",\n \"Submitted for platform review. It deploys to the Node Store as soon as it is approved.\",\n ),\n );\n }\n } catch (err) {\n setActionError(\n err instanceof Error\n ? err.message\n : tr(\"devportal.nodeLifecycle.deployFailed\", \"Deploy failed\"),\n );\n }\n };\n\n const copyVersionId = async () => {\n if (!version) return;\n try {\n await navigator.clipboard.writeText(version.id);\n setCopiedId(true);\n window.setTimeout(() => setCopiedId(false), 2000);\n } catch {\n setCopiedId(false);\n }\n };\n\n const versionsPath = `${basePath}/apps/${appId}/versions`;\n\n if (loading && !data) {\n return <LoadingState />;\n }\n\n if (error && !data) {\n return (\n <PageLayout\n title={tr(\"devportal.nodeLifecycle.title\", \"Publish a custom node\")}\n backLink={versionsPath}\n backLabel={tr(\"devportal.backToVersions\", \"Back to versions\")}\n >\n <EmptyState\n title={tr(\n \"devportal.nodeLifecycle.loadFailed\",\n \"Could not load this version\",\n )}\n description={error.message}\n />\n </PageLayout>\n );\n }\n\n if (!app || !version || !lifecycle || app.appType !== \"NODE\") {\n return (\n <PageLayout\n title={tr(\"devportal.nodeLifecycle.title\", \"Publish a custom node\")}\n backLink={versionsPath}\n backLabel={tr(\"devportal.backToVersions\", \"Back to versions\")}\n >\n <EmptyState\n title={tr(\n \"devportal.nodeLifecycle.notFound\",\n \"Custom node version not found\",\n )}\n description={tr(\n \"devportal.nodeLifecycle.notFoundDescription\",\n \"This page shows the lifecycle of a version of a Node application. Pick a version from the versions page.\",\n )}\n />\n </PageLayout>\n );\n }\n\n const status = version.status.toLowerCase();\n const editable = status === \"draft\" || status === \"rejected\";\n const deploying = submitting || publishingPrivately;\n const deployDisabled = Boolean(blocker) || deploying || replacingPackage;\n const [blockerKey, blockerFallback] = blocker\n ? BLOCKER_COPY[blocker]\n : [\"\", \"\"];\n const deployLabel =\n visibility === \"private\"\n ? tr(\"devportal.nodeLifecycle.deployPrivate\", \"Deploy to my organization\")\n : storeNeedsAppSubmission\n ? tr(\n \"devportal.nodeLifecycle.continueToStore\",\n \"Continue to store submission\",\n )\n : tr(\"devportal.nodeLifecycle.submitToStore\", \"Submit for review\");\n\n return (\n <PageLayout\n title={\n <span className=\"flex flex-col gap-2\">\n <span className=\"w-fit rounded-md bg-status-info-bg-subtle px-2 py-0.5 text-xs font-semibold uppercase tracking-wide text-status-info-text\">\n {tr(\"devportal.nodeLifecycle.badge\", \"Custom node\")}\n </span>\n <span>\n {tr(\"devportal.nodeLifecycle.title\", \"Publish a custom node\")}\n {\" · \"}\n <span className=\"font-mono\">\n {app.slug} v{version.version}\n </span>\n </span>\n </span>\n }\n backLink={versionsPath}\n backLabel={tr(\"devportal.backToVersions\", \"Back to versions\")}\n purpose={tr(\n \"devportal.nodeLifecycle.purpose\",\n \"Every custom node goes through the same five stages before workflows can use it. Validation, the sandbox build and the operation tests run automatically after you upload the package.\",\n )}\n fullWidth\n >\n <div className=\"flex flex-wrap items-center gap-2 text-sm text-text-secondary\">\n <span>{tr(\"devportal.nodeLifecycle.versionId\", \"Version ID\")}</span>\n <code\n className=\"rounded-md border border-border-seam bg-bg-sunken px-2 py-0.5 font-mono text-text-primary\"\n data-testid=\"node-lifecycle-version-id\"\n >\n {version.id}\n </code>\n <button\n type=\"button\"\n onClick={copyVersionId}\n aria-label={tr(\n \"devportal.nodeLifecycle.copyVersionId\",\n \"Copy version ID\",\n )}\n className=\"rounded-md p-1 hover:bg-accent\"\n >\n {copiedId ? <Check size={14} /> : <Copy size={14} />}\n </button>\n </div>\n\n {actionError && (\n <div\n role=\"alert\"\n className=\"flex items-start gap-2 rounded-md bg-status-error-bg-subtle px-4 py-3 text-sm text-status-error-text\"\n >\n <AlertTriangle size={16} className=\"mt-0.5 shrink-0\" />\n {actionError}\n </div>\n )}\n {actionSuccess && (\n <div\n role=\"status\"\n className=\"flex items-start gap-2 rounded-md bg-status-success-bg-subtle px-4 py-3 text-sm text-status-success-text\"\n >\n <CheckCircle2 size={16} className=\"mt-0.5 shrink-0\" />\n {actionSuccess}\n </div>\n )}\n\n <section className=\"rounded-card border border-border-seam bg-bg-surface p-5\">\n <Stepper lifecycle={lifecycle} tr={tr} />\n {status === \"rejected\" && version.reviewNotes && (\n <p className=\"mt-4 rounded-md bg-status-error-bg-subtle px-3 py-2 text-sm text-status-error-text\">\n {tr(\"devportal.nodeLifecycle.reviewNotes\", \"Reviewer notes:\")}{\" \"}\n {version.reviewNotes}\n </p>\n )}\n </section>\n\n <section className=\"flex flex-col gap-3 rounded-card border border-border-seam bg-bg-surface p-5 sm:flex-row sm:items-center sm:justify-between\">\n <div className=\"flex items-center gap-3\">\n <Upload size={18} className=\"text-text-secondary\" />\n <div className=\"flex flex-col\">\n <span className=\"text-sm font-medium\">\n {version.packageUrl\n ? tr(\n \"devportal.nodeLifecycle.packageAttached\",\n \"Package attached\",\n )\n : tr(\n \"devportal.nodeLifecycle.packageMissing\",\n \"No package yet\",\n )}\n </span>\n <span className=\"text-xs text-text-secondary\">\n {version.packageUrl\n ? [\n version.packageSize &&\n tr(\"devportal.nodeLifecycle.packageSize\", \"{{size}} KB\", {\n size: Math.max(\n 1,\n Math.round(Number(version.packageSize) / 1024),\n ),\n }),\n version.packageHash &&\n `sha256 ${version.packageHash.slice(0, 12)}…`,\n ]\n .filter(Boolean)\n .join(\" · \")\n : tr(\n \"devportal.nodeLifecycle.packageHint\",\n \"A .zip with manifest.json and the node's server (fluidgrids-node new scaffolds one).\",\n )}\n </span>\n {uploading && (\n <span className=\"text-xs text-status-info-text\">\n {tr(\n \"devportal.nodeLifecycle.uploading\",\n \"Uploading… {{progress}}%\",\n {\n progress: Math.round(progress),\n },\n )}\n </span>\n )}\n {uploadError && (\n <span className=\"text-xs text-status-error-text\">\n {uploadError}\n </span>\n )}\n </div>\n </div>\n {editable && canUpdate && (\n <>\n <input\n ref={zipInputRef}\n type=\"file\"\n accept=\".zip,application/zip\"\n className=\"hidden\"\n data-testid=\"node-lifecycle-zip-input\"\n onChange={handlePackageSelected}\n />\n <button\n type=\"button\"\n disabled={uploading || replacingPackage}\n onClick={() => zipInputRef.current?.click()}\n className=\"inline-flex items-center gap-2 rounded-md border border-border-seam px-4 py-2 text-sm font-medium hover:bg-accent disabled:opacity-50\"\n >\n {uploading ? (\n <Loader2 size={16} className=\"animate-spin\" />\n ) : (\n <Upload size={16} />\n )}\n {version.packageUrl\n ? tr(\"devportal.nodeLifecycle.replaceZip\", \"Replace ZIP\")\n : tr(\"devportal.nodeLifecycle.uploadZip\", \"Upload ZIP\")}\n </button>\n </>\n )}\n </section>\n\n <div className=\"grid grid-cols-1 gap-4 lg:grid-cols-2\">\n <ChecksPanel lifecycle={lifecycle} tr={tr} />\n <ManifestPreview manifest={version.manifest} tr={tr} />\n </div>\n\n <section\n className=\"flex flex-col gap-4 rounded-card border border-border-seam bg-bg-surface p-5 lg:flex-row lg:items-center lg:justify-between\"\n data-testid=\"node-lifecycle-deploy\"\n >\n <div className=\"flex flex-col gap-2\">\n <span className=\"text-sm font-semibold\">\n {tr(\"devportal.nodeLifecycle.visibility\", \"Visibility\")}\n </span>\n <div\n role=\"radiogroup\"\n aria-label={tr(\"devportal.nodeLifecycle.visibility\", \"Visibility\")}\n className=\"inline-flex w-fit overflow-hidden rounded-md border border-border-seam\"\n >\n {(\n [\n [\n \"private\",\n <Lock key=\"i\" size={14} />,\n tr(\"devportal.nodeLifecycle.private\", \"Workspace-private\"),\n ],\n [\n \"store\",\n <Globe key=\"i\" size={14} />,\n tr(\"devportal.nodeLifecycle.store\", \"Submit to store\"),\n ],\n ] as const\n ).map(([value, icon, label]) => {\n const selected = visibility === value;\n return (\n <span\n key={value}\n role=\"radio\"\n aria-checked={selected}\n aria-disabled={!selected}\n data-visibility={value}\n className={cn(\n \"inline-flex items-center gap-2 px-4 py-2 text-sm\",\n selected\n ? \"bg-status-info-bg-subtle font-medium text-status-info-text\"\n : \"text-text-secondary\",\n )}\n >\n {icon}\n {label}\n </span>\n );\n })}\n </div>\n <p className=\"max-w-xl text-xs text-text-secondary\">\n {visibility === \"private\"\n ? tr(\n \"devportal.nodeLifecycle.privateHint\",\n \"Private nodes skip platform review: deploying approves the version for your organization and only its workspaces can install it.\",\n )\n : tr(\n \"devportal.nodeLifecycle.storeHint\",\n \"Store nodes are reviewed by the platform team and deploy to the public Node Store once approved.\",\n )}{\" \"}\n <button\n type=\"button\"\n className=\"font-medium text-status-info-text hover:underline\"\n onClick={() => go(`/apps/${appId}/edit`)}\n >\n {tr(\n \"devportal.nodeLifecycle.changeVisibility\",\n \"Change visibility\",\n )}\n </button>\n </p>\n </div>\n <div className=\"flex flex-col items-stretch gap-2 lg:items-end\">\n <div className=\"flex flex-wrap gap-2\">\n <button\n type=\"button\"\n onClick={() => go(`/apps/${appId}/versions`)}\n className=\"inline-flex items-center justify-center gap-2 rounded-md border border-border-seam px-4 py-2 text-sm font-medium hover:bg-accent\"\n >\n <BookOpen size={16} />\n {tr(\"devportal.nodeLifecycle.allVersions\", \"All versions\")}\n </button>\n {lifecycle.steps[4].status !== \"complete\" && (\n <button\n type=\"button\"\n onClick={handleDeploy}\n disabled={deployDisabled}\n aria-disabled={deployDisabled}\n data-testid=\"node-lifecycle-deploy-button\"\n className=\"inline-flex items-center justify-center gap-2 rounded-md bg-action-primary-bg px-5 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 disabled:cursor-not-allowed disabled:opacity-50\"\n >\n {deploying ? (\n <Loader2 size={16} className=\"animate-spin\" />\n ) : visibility === \"private\" ? (\n <Building2 size={16} />\n ) : (\n <Rocket size={16} />\n )}\n {deployLabel}\n </button>\n )}\n </div>\n {blocker && lifecycle.steps[4].status !== \"complete\" && (\n <p\n className=\"max-w-sm text-xs text-text-secondary lg:text-right\"\n data-testid=\"node-lifecycle-deploy-blocker\"\n data-blocker={blocker}\n >\n {tr(blockerKey, blockerFallback)}\n </p>\n )}\n {lifecycle.steps[4].status === \"complete\" && (\n <p className=\"inline-flex items-center gap-1 text-sm font-medium text-status-success-text\">\n <CheckCircle2 size={16} />\n {stepReason(tr, lifecycle.steps[4])}\n </p>\n )}\n </div>\n </section>\n </PageLayout>\n );\n};\n\nexport default NodeLifecyclePage;\n"],"mappings":"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"}
1
+ {"version":3,"file":"NodeLifecyclePage.js","names":["_Fragment","LIFECYCLE_POLL_INTERVAL_MS","STEP_LABELS","STEP_REASONS","CHECK_META","Package","FileCode2","ShieldCheck","Server","FlaskConical","CHECK_BADGE","BLOCKER_COPY","stepReason","tr","step","StepIndicator","base","cn","Check","XCircle","Loader2","index","Stepper","lifecycle","key","fallback","tone","checkDetail","check","passed","total","ChecksPanel","showLogs","setShowLogs","useState","smoke","operations","finishedAt","meta","badge","detail","issue","value","jsx","ChevronUp","ChevronDown","op","CheckCircle2","MinusCircle","ManifestPreview","copied","setCopied","text","useMemo","manifest","lines","Copy","line","NodeLifecyclePage","useTr","useParams","useDevportal","canPublish","useDevportalPermission","DEVPORTAL_PERMISSIONS","canUpdate","useGetApplicationQuery","appId","app","data","versions","edge","version","v","versionId","appVisibility","visibility","visibilityForApp","deriveNodeLifecycle","busy","startPolling","stopPolling","otherVersionPending","updateVersion","useUpdateApplicationVersionMutation","submitForReview","submitting","usePublishApplicationVersionMutation","publishToOrganization","publishingPrivately","usePublishApplicationVersionToOrganizationMutation","uploadPackage","uploadError","usePackageUpload","workspacesGatewayUrl","authToken","workspaceId","getWorkspaceToken","zipInputRef","useRef","actionError","setActionError","actionSuccess","setActionSuccess","copiedId","setCopiedId","replacingPackage","setReplacingPackage","go","useCallback","navigate","basePath","path","handlePackageSelected","file","event","uploaded","result","err","storeNeedsAppSubmission","blocker","deployBlocker","handleDeploy","copyVersionId","versionsPath","loading","LoadingState","error","PageLayout","EmptyState","status","editable","deploying","deployDisabled","blockerKey","blockerFallback","deployLabel","AlertTriangle","Upload","uploading","progress","Fragment","Lock","Globe","icon","label","selected","BookOpen","Building2","Rocket"],"sources":["../../../src/devportal/pages/NodeLifecyclePage.tsx"],"sourcesContent":["/**\n * NodeLifecyclePage — \"Publish a custom node\" (BOFF-4076).\n *\n * One page that walks a custom-node version through its whole lifecycle:\n * upload ZIP → validate manifest → run tests → approval → deploy. It is a view\n * over the ApplicationVersion that global-devportal-svc already maintains (see\n * utils/nodeLifecycle.ts), plus the three developer actions the lifecycle\n * needs: upload or replace the package, publish a workspace-private node to\n * the developer's organization, and submit a store node for platform review.\n *\n * The page polls while the platform is working (validating, building,\n * testing, reviewing) so each stage flips as soon as the service records it.\n */\nimport type { FC, ReactNode } from \"react\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useParams } from \"react-router\";\nimport {\n AlertTriangle,\n BookOpen,\n Building2,\n Check,\n CheckCircle2,\n ChevronDown,\n ChevronUp,\n Copy,\n FileCode2,\n FlaskConical,\n Globe,\n Loader2,\n Lock,\n MinusCircle,\n Package,\n Rocket,\n Server,\n ShieldCheck,\n Upload,\n XCircle,\n} from \"lucide-react\";\n\nimport { PageLayout } from \"../components/PageLayout\";\nimport { LoadingState } from \"../components/LoadingState\";\nimport { EmptyState } from \"../components/EmptyState\";\nimport { cn } from \"../utils/cn\";\nimport { useTr } from \"../utils/i18n\";\nimport {\n useGetApplicationQuery,\n useUpdateApplicationVersionMutation,\n usePublishApplicationVersionMutation,\n usePublishApplicationVersionToOrganizationMutation,\n type ApplicationVersionFieldsFragment,\n} from \"../hooks\";\nimport { DEVPORTAL_PERMISSIONS } from \"../constants/permissions\";\nimport { useDevportalPermission } from \"../hooks/usePermission\";\nimport { useDevportal } from \"../providers/DevportalProvider\";\nimport { usePackageUpload } from \"../hooks/usePackageUpload\";\nimport {\n deployBlocker,\n deriveNodeLifecycle,\n visibilityForApp,\n type CheckStatus,\n type DeployBlocker,\n type LifecycleCheck,\n type LifecycleStep,\n type NodeLifecycle,\n} from \"../utils/nodeLifecycle\";\n\n/** Poll every 10 s while the platform is still working on the version. */\nexport const LIFECYCLE_POLL_INTERVAL_MS = 10_000;\n\ntype Tr = ReturnType<typeof useTr>;\n\nconst STEP_LABELS: Record<LifecycleStep[\"id\"], [string, string]> = {\n upload: [\"devportal.nodeLifecycle.step.upload\", \"Upload ZIP\"],\n validate: [\"devportal.nodeLifecycle.step.validate\", \"Validate manifest\"],\n test: [\"devportal.nodeLifecycle.step.test\", \"Run tests\"],\n approval: [\"devportal.nodeLifecycle.step.approval\", \"Approval\"],\n deploy: [\"devportal.nodeLifecycle.step.deploy\", \"Deploy\"],\n};\n\nconst STEP_REASONS: Record<string, string> = {\n uploaded: \"Completed\",\n noPackage: \"Upload the node package\",\n waitingForPackage: \"Pending\",\n passed: \"Completed\",\n failed: \"Failed — see checks\",\n validating: \"In progress\",\n notValidated: \"Upload the package again to validate it\",\n waitingForValidation: \"Pending\",\n building: \"Building sandbox image\",\n buildFailed: \"Build failed\",\n testing: \"Testing operations\",\n testsFailed: \"Tests failed\",\n testsSkipped: \"Completed (tests not run here)\",\n testsPassed: \"Completed\",\n built: \"Completed\",\n organization: \"Approved by your organization\",\n approved: \"Approved\",\n inReview: \"Awaiting platform review\",\n rejected: \"Changes requested\",\n waitingForTests: \"Pending\",\n readyForOrganization: \"Auto-approved when you deploy\",\n readyToSubmit: \"Submit for platform review\",\n deprecated: \"Deprecated\",\n store: \"Live in the Node Store\",\n deployedToOrganization: \"Installable in your organization's workspaces\",\n ready: \"Ready to deploy\",\n waitingForApproval: \"Pending\",\n};\n\nconst CHECK_META: Record<\n LifecycleCheck[\"id\"],\n { icon: ReactNode; key: string; label: string }\n> = {\n structure: {\n icon: <Package size={16} />,\n key: \"devportal.nodeLifecycle.check.structure\",\n label: \"Package structure\",\n },\n manifest: {\n icon: <FileCode2 size={16} />,\n key: \"devportal.nodeLifecycle.check.manifest\",\n label: \"Manifest & operations\",\n },\n security: {\n icon: <ShieldCheck size={16} />,\n key: \"devportal.nodeLifecycle.check.security\",\n label: \"Security scan\",\n },\n build: {\n icon: <Server size={16} />,\n key: \"devportal.nodeLifecycle.check.build\",\n label: \"Sandbox image build\",\n },\n tests: {\n icon: <FlaskConical size={16} />,\n key: \"devportal.nodeLifecycle.check.tests\",\n label: \"Automated operation tests\",\n },\n};\n\nconst CHECK_BADGE: Record<CheckStatus, { label: string; className: string }> = {\n pass: {\n label: \"PASS\",\n className: \"bg-status-success-bg-subtle text-status-success-text\",\n },\n warn: {\n label: \"REVIEW\",\n className: \"bg-status-warning-bg-subtle text-status-warning-text\",\n },\n fail: {\n label: \"FAIL\",\n className: \"bg-status-error-bg-subtle text-status-error-text\",\n },\n running: {\n label: \"RUNNING\",\n className: \"bg-status-info-bg-subtle text-status-info-text\",\n },\n not_run: {\n label: \"NOT RUN\",\n className: \"bg-bg-sunken text-text-secondary\",\n },\n};\n\nconst BLOCKER_COPY: Record<DeployBlocker, [string, string]> = {\n noPermission: [\n \"devportal.nodeLifecycle.blocker.noPermission\",\n \"You do not have permission to publish versions of this node.\",\n ],\n notDraft: [\n \"devportal.nodeLifecycle.blocker.notDraft\",\n \"This version has already been submitted or deployed. Create a new version to ship a change.\",\n ],\n visibilityMismatch: [\n \"devportal.nodeLifecycle.blocker.visibilityMismatch\",\n \"This node's visibility does not allow that. Change it under Edit application.\",\n ],\n noPackage: [\n \"devportal.nodeLifecycle.blocker.noPackage\",\n \"Upload the node package first.\",\n ],\n validationNotPassed: [\n \"devportal.nodeLifecycle.blocker.validationNotPassed\",\n \"The package must pass validation first.\",\n ],\n buildNotReady: [\n \"devportal.nodeLifecycle.blocker.buildNotReady\",\n \"Waiting for the sandbox image to build.\",\n ],\n testsNotPassed: [\n \"devportal.nodeLifecycle.blocker.testsNotPassed\",\n \"The operation tests must finish without failures first.\",\n ],\n noWorkspace: [\n \"devportal.nodeLifecycle.blocker.noWorkspace\",\n \"Open the developer portal from a workspace of your organization to publish privately.\",\n ],\n pendingVersion: [\n \"devportal.nodeLifecycle.blocker.pendingVersion\",\n \"Another version of this node is already in review.\",\n ],\n};\n\nfunction stepReason(tr: Tr, step: LifecycleStep): string {\n return tr(\n `devportal.nodeLifecycle.reason.${step.reason}`,\n STEP_REASONS[step.reason] ?? step.reason,\n );\n}\n\nconst StepIndicator: FC<{ step: LifecycleStep; index: number }> = ({\n step,\n index,\n}) => {\n const base =\n \"flex h-11 w-11 shrink-0 items-center justify-center rounded-full border-2 text-sm font-semibold\";\n switch (step.status) {\n case \"complete\":\n return (\n <span\n className={cn(\n base,\n \"border-status-success-text bg-status-success-bg-subtle text-status-success-text\",\n )}\n >\n <Check size={20} />\n </span>\n );\n case \"failed\":\n return (\n <span\n className={cn(\n base,\n \"border-status-error-text bg-status-error-bg-subtle text-status-error-text\",\n )}\n >\n <XCircle size={20} />\n </span>\n );\n case \"in_progress\":\n return (\n <span\n className={cn(\n base,\n \"border-action-primary-bg bg-action-primary-bg text-action-primary-text\",\n )}\n >\n <Loader2 size={18} className=\"animate-spin\" />\n </span>\n );\n case \"action\":\n return (\n <span\n className={cn(\n base,\n \"border-action-primary-bg bg-action-primary-bg text-action-primary-text\",\n )}\n >\n {index + 1}\n </span>\n );\n default:\n return (\n <span className={cn(base, \"border-border-seam text-text-secondary\")}>\n {index + 1}\n </span>\n );\n }\n};\n\nconst Stepper: FC<{ lifecycle: NodeLifecycle; tr: Tr }> = ({\n lifecycle,\n tr,\n}) => (\n <ol\n className=\"grid grid-cols-1 gap-4 sm:grid-cols-5\"\n data-testid=\"node-lifecycle-stepper\"\n >\n {lifecycle.steps.map((step, index) => {\n const [key, fallback] = STEP_LABELS[step.id];\n const tone =\n step.status === \"complete\"\n ? \"text-status-success-text\"\n : step.status === \"failed\"\n ? \"text-status-error-text\"\n : step.status === \"in_progress\" || step.status === \"action\"\n ? \"text-status-info-text\"\n : \"text-text-secondary\";\n return (\n <li\n key={step.id}\n className=\"flex items-center gap-3 sm:flex-col sm:text-center\"\n data-step={step.id}\n data-status={step.status}\n aria-current={index === lifecycle.currentIndex ? \"step\" : undefined}\n >\n <StepIndicator step={step} index={index} />\n <div className=\"flex flex-col\">\n <span className=\"text-sm font-semibold text-text-primary\">\n {index + 1}. {tr(key, fallback)}\n </span>\n <span className={cn(\"text-xs\", tone)}>{stepReason(tr, step)}</span>\n </div>\n </li>\n );\n })}\n </ol>\n);\n\nfunction checkDetail(tr: Tr, check: LifecycleCheck): string | null {\n if (check.id === \"tests\" && check.status === \"pass\" && check.detail) {\n const [passed, total] = check.detail.split(\"/\");\n return tr(\n \"devportal.nodeLifecycle.testsPassing\",\n \"{{passed}} / {{total}} passing\",\n { passed: passed ?? \"0\", total: total ?? \"0\" },\n );\n }\n if (check.detail === \"notValidated\") {\n return tr(\n \"devportal.nodeLifecycle.notValidated\",\n \"Uploaded before validation existed\",\n );\n }\n if (check.detail === \"blockedByValidation\") {\n return tr(\n \"devportal.nodeLifecycle.blockedByValidation\",\n \"Not built: the package failed validation\",\n );\n }\n return check.detail;\n}\n\nconst ChecksPanel: FC<{ lifecycle: NodeLifecycle; tr: Tr }> = ({\n lifecycle,\n tr,\n}) => {\n const [showLogs, setShowLogs] = useState(false);\n const smoke = lifecycle.smoke;\n const operations =\n smoke.kind === \"passed\" ||\n smoke.kind === \"failed\" ||\n smoke.kind === \"skipped\"\n ? smoke.operations\n : [];\n const finishedAt =\n smoke.kind === \"passed\" ||\n smoke.kind === \"failed\" ||\n smoke.kind === \"skipped\"\n ? smoke.finishedAt\n : null;\n\n return (\n <section\n className=\"flex flex-col rounded-card border border-border-seam bg-bg-surface\"\n data-testid=\"node-lifecycle-checks\"\n >\n <h2 className=\"border-b border-border-seam px-5 py-4 text-base font-semibold\">\n {tr(\"devportal.nodeLifecycle.checks\", \"Checks\")}\n </h2>\n <ul className=\"divide-y divide-border-seam\">\n {lifecycle.checks.map((check) => {\n const meta = CHECK_META[check.id];\n const badge = CHECK_BADGE[check.status];\n const detail = checkDetail(tr, check);\n return (\n <li\n key={check.id}\n className=\"px-5 py-3\"\n data-check={check.id}\n data-status={check.status}\n >\n <div className=\"flex items-center gap-3\">\n <span className=\"text-text-secondary\">{meta.icon}</span>\n <span className=\"flex-1 text-sm font-medium\">\n {tr(meta.key, meta.label)}\n {detail && (\n <span className=\"ml-2 text-xs font-normal text-text-secondary\">\n {detail}\n </span>\n )}\n </span>\n <span\n className={cn(\n \"inline-flex items-center gap-1 rounded-md px-2 py-0.5 text-xs font-semibold\",\n badge.className,\n )}\n >\n {check.status === \"running\" && (\n <Loader2 size={11} className=\"animate-spin\" />\n )}\n {tr(\n `devportal.nodeLifecycle.badge.${check.status}`,\n badge.label,\n )}\n </span>\n </div>\n {check.issues.length > 0 && (\n <ul className=\"mt-2 space-y-1 pl-7\">\n {check.issues.map((issue, index) => (\n <li\n key={`${issue.code}-${issue.path}-${index}`}\n className=\"text-xs leading-snug\"\n >\n {issue.path && (\n <code className=\"mr-1 rounded bg-bg-sunken px-1 py-0.5 font-mono text-text-primary\">\n {issue.path}\n </code>\n )}\n <span\n className={\n issue.severity === \"error\"\n ? \"text-status-error-text\"\n : \"text-status-warning-text\"\n }\n >\n {issue.message}\n </span>\n </li>\n ))}\n </ul>\n )}\n </li>\n );\n })}\n </ul>\n <div className=\"mt-auto border-t border-border-seam px-5 py-3\">\n <div className=\"flex items-center justify-between gap-2 text-xs text-text-secondary\">\n <span>\n {finishedAt\n ? tr(\n \"devportal.nodeLifecycle.testsFinished\",\n \"Tests finished {{time}}\",\n { time: new Date(finishedAt).toLocaleString() },\n )\n : tr(\n \"devportal.nodeLifecycle.testsNotFinished\",\n \"No test run recorded yet\",\n )}\n </span>\n {operations.length > 0 && (\n <button\n type=\"button\"\n className=\"inline-flex items-center gap-1 font-medium text-status-info-text hover:underline\"\n onClick={() => setShowLogs((value) => !value)}\n aria-expanded={showLogs}\n >\n {showLogs\n ? tr(\"devportal.nodeLifecycle.hideTestLogs\", \"Hide test logs\")\n : tr(\"devportal.nodeLifecycle.viewTestLogs\", \"View test logs\")}\n {showLogs ? <ChevronUp size={12} /> : <ChevronDown size={12} />}\n </button>\n )}\n </div>\n {showLogs && (\n <ul\n className=\"mt-3 space-y-1 rounded-md bg-bg-sunken p-3 font-mono text-xs\"\n data-testid=\"node-lifecycle-test-logs\"\n >\n {operations.map((op, index) => (\n <li key={`${op.name}-${index}`} className=\"flex gap-2\">\n {op.status === \"PASS\" ? (\n <CheckCircle2\n size={12}\n className=\"mt-0.5 shrink-0 text-status-success-text\"\n />\n ) : op.status === \"SKIP\" ? (\n <MinusCircle\n size={12}\n className=\"mt-0.5 shrink-0 text-text-secondary\"\n />\n ) : (\n <XCircle\n size={12}\n className=\"mt-0.5 shrink-0 text-status-error-text\"\n />\n )}\n <span className=\"text-text-primary\">{op.name}</span>\n <span className=\"text-text-secondary\">\n {op.status} · {op.durationMs} ms\n </span>\n {(op.error ?? op.detail) && (\n <span className=\"break-all text-text-secondary\">\n {op.error ?? op.detail}\n </span>\n )}\n </li>\n ))}\n </ul>\n )}\n </div>\n </section>\n );\n};\n\nconst ManifestPreview: FC<{ manifest: unknown; tr: Tr }> = ({\n manifest,\n tr,\n}) => {\n const [copied, setCopied] = useState(false);\n const text = useMemo(\n () => (manifest ? JSON.stringify(manifest, null, 2) : \"\"),\n [manifest],\n );\n const lines = text ? text.split(\"\\n\") : [];\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(text);\n setCopied(true);\n window.setTimeout(() => setCopied(false), 2000);\n } catch {\n setCopied(false);\n }\n };\n\n return (\n <section\n className=\"flex min-w-0 flex-col rounded-card border border-border-seam bg-bg-surface\"\n data-testid=\"node-lifecycle-manifest\"\n >\n <div className=\"flex items-center justify-between gap-2 border-b border-border-seam px-5 py-3\">\n <h2 className=\"text-base font-semibold\">\n {tr(\"devportal.nodeLifecycle.manifestPreview\", \"Manifest preview\")}{\" \"}\n <span className=\"font-normal text-text-secondary\">\n (manifest.json)\n </span>\n </h2>\n {text && (\n <button\n type=\"button\"\n onClick={handleCopy}\n className=\"inline-flex items-center gap-1.5 rounded-md border border-border-seam px-3 py-1.5 text-xs font-medium hover:bg-accent\"\n >\n {copied ? <Check size={13} /> : <Copy size={13} />}\n {copied\n ? tr(\"devportal.copied\", \"Copied\")\n : tr(\"devportal.copy\", \"Copy\")}\n </button>\n )}\n </div>\n {lines.length > 0 ? (\n <pre className=\"max-h-[28rem] flex-1 overflow-auto px-0 py-3 font-mono text-xs leading-5\">\n {lines.map((line, index) => (\n <div key={index} className=\"flex\">\n <span className=\"w-10 shrink-0 select-none pr-3 text-right text-text-tertiary\">\n {index + 1}\n </span>\n <span className=\"whitespace-pre text-text-primary\">{line}</span>\n </div>\n ))}\n </pre>\n ) : (\n <p className=\"px-5 py-6 text-sm text-text-secondary\">\n {tr(\n \"devportal.nodeLifecycle.noManifest\",\n \"This version has no manifest yet. Add one from the versions page.\",\n )}\n </p>\n )}\n </section>\n );\n};\n\nexport const NodeLifecyclePage: FC = () => {\n const tr = useTr();\n const { appId, versionId } = useParams<{\n appId: string;\n versionId: string;\n }>();\n const {\n basePath,\n navigate,\n workspaceId,\n workspacesGatewayUrl,\n authToken,\n getWorkspaceToken,\n } = useDevportal();\n const { allowed: canPublish } = useDevportalPermission(\n DEVPORTAL_PERMISSIONS.APP_VERSION_PUBLISH,\n );\n const { allowed: canUpdate } = useDevportalPermission(\n DEVPORTAL_PERMISSIONS.APP_VERSION_UPDATE,\n );\n\n const { data, loading, error, startPolling, stopPolling } =\n useGetApplicationQuery({\n variables: { id: appId ?? \"\" },\n skip: !appId,\n fetchPolicy: \"cache-and-network\",\n });\n\n const app = data?.application;\n const versions: ApplicationVersionFieldsFragment[] = useMemo(\n () =>\n app?.versions?.edges?.map(\n (edge: { node: ApplicationVersionFieldsFragment }) => edge.node,\n ) ?? [],\n [app?.versions],\n );\n const version = versions.find((v) => v.id === versionId) ?? null;\n const appVisibility = app?.visibility ?? null;\n const visibility = visibilityForApp(appVisibility);\n\n const lifecycle = useMemo(\n () => (version ? deriveNodeLifecycle(version, visibility) : null),\n [version, visibility],\n );\n\n // Poll only while the platform is working; stop once every stage settles.\n const busy = lifecycle?.busy ?? false;\n useEffect(() => {\n if (!busy) return undefined;\n startPolling(LIFECYCLE_POLL_INTERVAL_MS);\n return () => stopPolling();\n }, [busy, startPolling, stopPolling]);\n\n const otherVersionPending = versions.some(\n (v) => v.id !== versionId && v.status === \"pending_review\",\n );\n\n // Wait for the refetch so the page shows the new package's (pending)\n // validation before the replacement counts as finished.\n const [updateVersion] = useUpdateApplicationVersionMutation({\n refetchQueries: [\"GetApplication\"],\n awaitRefetchQueries: true,\n });\n const [submitForReview, { loading: submitting }] =\n usePublishApplicationVersionMutation({\n refetchQueries: [\"GetApplication\"],\n });\n const [publishToOrganization, { loading: publishingPrivately }] =\n usePublishApplicationVersionToOrganizationMutation({\n refetchQueries: [\"GetApplication\"],\n });\n const {\n upload: uploadPackage,\n uploading,\n progress,\n error: uploadError,\n } = usePackageUpload(\n workspacesGatewayUrl,\n authToken,\n workspaceId,\n getWorkspaceToken,\n );\n const zipInputRef = useRef<HTMLInputElement>(null);\n const [actionError, setActionError] = useState<string | null>(null);\n const [actionSuccess, setActionSuccess] = useState<string | null>(null);\n const [copiedId, setCopiedId] = useState(false);\n // True from the moment a package is picked until the version carries it and\n // has been re-read. Deploy stays disabled meanwhile: the readiness shown is\n // still the old package's, and deploying now would ship the old package.\n const [replacingPackage, setReplacingPackage] = useState(false);\n\n const go = useCallback(\n (path: string) => navigate?.(`${basePath}${path}`),\n [navigate, basePath],\n );\n\n const handlePackageSelected = async (\n event: React.ChangeEvent<HTMLInputElement>,\n ) => {\n const file = event.target.files?.[0];\n event.target.value = \"\";\n if (!file || !version) return;\n setActionError(null);\n setActionSuccess(null);\n if (!file.name.toLowerCase().endsWith(\".zip\")) {\n setActionError(\n tr(\n \"devportal.nodeLifecycle.zipOnly\",\n \"Upload the node as a .zip package.\",\n ),\n );\n return;\n }\n setReplacingPackage(true);\n try {\n const uploaded = await uploadPackage(file);\n const result = await updateVersion({\n variables: {\n id: version.id,\n input: {\n packageUrl: uploaded.downloadUrl,\n packageSize: String(file.size),\n },\n },\n });\n if (result.error || !result.data?.updateApplicationVersion) {\n throw (\n result.error ??\n new Error(\n tr(\n \"devportal.nodeLifecycle.uploadFailed\",\n \"Failed to attach the package to this version\",\n ),\n )\n );\n }\n setActionSuccess(\n tr(\n \"devportal.nodeLifecycle.uploaded\",\n \"Package uploaded. Validation and tests start automatically.\",\n ),\n );\n } catch (err) {\n setActionError(\n err instanceof Error\n ? err.message\n : tr(\n \"devportal.nodeLifecycle.uploadFailed\",\n \"Failed to attach the package to this version\",\n ),\n );\n } finally {\n setReplacingPackage(false);\n }\n };\n\n const storeNeedsAppSubmission =\n visibility === \"store\" && app?.status !== \"PUBLISHED\";\n\n const blocker =\n version && lifecycle\n ? deployBlocker({\n lifecycle,\n version,\n visibility,\n appVisibility,\n workspaceId,\n otherVersionPending,\n canPublish,\n })\n : \"notDraft\";\n\n const handleDeploy = async () => {\n if (!version || blocker || replacingPackage) return;\n setActionError(null);\n setActionSuccess(null);\n if (storeNeedsAppSubmission) {\n // A node's first store release is submitted together with its listing\n // and pricing from the publish page; later versions are submitted here.\n go(`/apps/${appId}/publish`);\n return;\n }\n try {\n if (visibility === \"private\") {\n if (!workspaceId) return;\n const result = await publishToOrganization({\n variables: { id: version.id, workspaceId },\n });\n if (\n result.error ||\n !result.data?.publishApplicationVersionToOrganization\n ) {\n throw (\n result.error ??\n new Error(\n tr(\n \"devportal.versionPublishToOrganizationFailed\",\n \"Failed to publish the version to your organization\",\n ),\n )\n );\n }\n setActionSuccess(\n tr(\n \"devportal.nodeLifecycle.deployedPrivately\",\n \"Deployed to your organization. Workspace admins can now install it from the Node Store.\",\n ),\n );\n } else {\n const result = await submitForReview({\n variables: { id: version.id },\n });\n if (result.error || !result.data?.publishApplicationVersion) {\n throw (\n result.error ??\n new Error(\n tr(\n \"devportal.versionPublishFailed\",\n \"Failed to submit version for review\",\n ),\n )\n );\n }\n setActionSuccess(\n tr(\n \"devportal.nodeLifecycle.submitted\",\n \"Submitted for platform review. It deploys to the Node Store as soon as it is approved.\",\n ),\n );\n }\n } catch (err) {\n setActionError(\n err instanceof Error\n ? err.message\n : tr(\"devportal.nodeLifecycle.deployFailed\", \"Deploy failed\"),\n );\n }\n };\n\n const copyVersionId = async () => {\n if (!version) return;\n try {\n await navigator.clipboard.writeText(version.id);\n setCopiedId(true);\n window.setTimeout(() => setCopiedId(false), 2000);\n } catch {\n setCopiedId(false);\n }\n };\n\n const versionsPath = `${basePath}/apps/${appId}/versions`;\n\n if (loading && !data) {\n return <LoadingState />;\n }\n\n if (error && !data) {\n return (\n <PageLayout\n title={tr(\"devportal.nodeLifecycle.title\", \"Publish a custom node\")}\n backLink={versionsPath}\n backLabel={tr(\"devportal.backToVersions\", \"Back to versions\")}\n >\n <EmptyState\n title={tr(\n \"devportal.nodeLifecycle.loadFailed\",\n \"Could not load this version\",\n )}\n description={error.message}\n />\n </PageLayout>\n );\n }\n\n if (!app || !version || !lifecycle || app.appType !== \"NODE\") {\n return (\n <PageLayout\n title={tr(\"devportal.nodeLifecycle.title\", \"Publish a custom node\")}\n backLink={versionsPath}\n backLabel={tr(\"devportal.backToVersions\", \"Back to versions\")}\n >\n <EmptyState\n title={tr(\n \"devportal.nodeLifecycle.notFound\",\n \"Custom node version not found\",\n )}\n description={tr(\n \"devportal.nodeLifecycle.notFoundDescription\",\n \"This page shows the lifecycle of a version of a Node application. Pick a version from the versions page.\",\n )}\n />\n </PageLayout>\n );\n }\n\n const status = version.status.toLowerCase();\n const editable = status === \"draft\" || status === \"rejected\";\n const deploying = submitting || publishingPrivately;\n const deployDisabled = Boolean(blocker) || deploying || replacingPackage;\n const [blockerKey, blockerFallback] = blocker\n ? BLOCKER_COPY[blocker]\n : [\"\", \"\"];\n const deployLabel =\n visibility === \"private\"\n ? tr(\"devportal.nodeLifecycle.deployPrivate\", \"Deploy to my organization\")\n : storeNeedsAppSubmission\n ? tr(\n \"devportal.nodeLifecycle.continueToStore\",\n \"Continue to store submission\",\n )\n : tr(\"devportal.nodeLifecycle.submitToStore\", \"Submit for review\");\n\n return (\n <PageLayout\n title={\n <span className=\"flex flex-col gap-2\">\n <span className=\"w-fit rounded-md bg-status-info-bg-subtle px-2 py-0.5 text-xs font-semibold uppercase tracking-wide text-status-info-text\">\n {tr(\"devportal.nodeLifecycle.badge\", \"Custom node\")}\n </span>\n <span>\n {tr(\"devportal.nodeLifecycle.title\", \"Publish a custom node\")}\n {\" · \"}\n <span className=\"font-mono\">\n {app.slug} v{version.version}\n </span>\n </span>\n </span>\n }\n backLink={versionsPath}\n backLabel={tr(\"devportal.backToVersions\", \"Back to versions\")}\n purpose={tr(\n \"devportal.nodeLifecycle.purpose\",\n \"Every custom node goes through the same five stages before workflows can use it. Validation, the sandbox build and the operation tests run automatically after you upload the package.\",\n )}\n fullWidth\n >\n <div className=\"flex flex-wrap items-center gap-2 text-sm text-text-secondary\">\n <span>{tr(\"devportal.nodeLifecycle.versionId\", \"Version ID\")}</span>\n <code\n className=\"rounded-md border border-border-seam bg-bg-sunken px-2 py-0.5 font-mono text-text-primary\"\n data-testid=\"node-lifecycle-version-id\"\n >\n {version.id}\n </code>\n <button\n type=\"button\"\n onClick={copyVersionId}\n aria-label={tr(\n \"devportal.nodeLifecycle.copyVersionId\",\n \"Copy version ID\",\n )}\n className=\"rounded-md p-1 hover:bg-accent\"\n >\n {copiedId ? <Check size={14} /> : <Copy size={14} />}\n </button>\n </div>\n\n {actionError && (\n <div\n role=\"alert\"\n className=\"flex items-start gap-2 rounded-md bg-status-error-bg-subtle px-4 py-3 text-sm text-status-error-text\"\n >\n <AlertTriangle size={16} className=\"mt-0.5 shrink-0\" />\n {actionError}\n </div>\n )}\n {actionSuccess && (\n <div\n role=\"status\"\n className=\"flex items-start gap-2 rounded-md bg-status-success-bg-subtle px-4 py-3 text-sm text-status-success-text\"\n >\n <CheckCircle2 size={16} className=\"mt-0.5 shrink-0\" />\n {actionSuccess}\n </div>\n )}\n\n <section className=\"rounded-card border border-border-seam bg-bg-surface p-5\">\n <Stepper lifecycle={lifecycle} tr={tr} />\n {status === \"rejected\" && version.reviewNotes && (\n <p className=\"mt-4 rounded-md bg-status-error-bg-subtle px-3 py-2 text-sm text-status-error-text\">\n {tr(\"devportal.nodeLifecycle.reviewNotes\", \"Reviewer notes:\")}{\" \"}\n {version.reviewNotes}\n </p>\n )}\n </section>\n\n <section className=\"flex flex-col gap-3 rounded-card border border-border-seam bg-bg-surface p-5 sm:flex-row sm:items-center sm:justify-between\">\n <div className=\"flex items-center gap-3\">\n <Upload size={18} className=\"text-text-secondary\" />\n <div className=\"flex flex-col\">\n <span className=\"text-sm font-medium\">\n {version.packageUrl\n ? tr(\n \"devportal.nodeLifecycle.packageAttached\",\n \"Package attached\",\n )\n : tr(\n \"devportal.nodeLifecycle.packageMissing\",\n \"No package yet\",\n )}\n </span>\n <span className=\"text-xs text-text-secondary\">\n {version.packageUrl\n ? [\n version.packageSize &&\n tr(\"devportal.nodeLifecycle.packageSize\", \"{{size}} KB\", {\n size: Math.max(\n 1,\n Math.round(Number(version.packageSize) / 1024),\n ),\n }),\n version.packageHash &&\n `sha256 ${version.packageHash.slice(0, 12)}…`,\n ]\n .filter(Boolean)\n .join(\" · \")\n : tr(\n \"devportal.nodeLifecycle.packageHint\",\n \"A .zip with manifest.json and the node's server (fluidgrids-node new scaffolds one).\",\n )}\n </span>\n {uploading && (\n <span className=\"text-xs text-status-info-text\">\n {tr(\n \"devportal.nodeLifecycle.uploading\",\n \"Uploading… {{progress}}%\",\n {\n progress: Math.round(progress),\n },\n )}\n </span>\n )}\n {uploadError && (\n <span className=\"text-xs text-status-error-text\">\n {uploadError}\n </span>\n )}\n </div>\n </div>\n {editable && canUpdate && (\n <>\n <input\n ref={zipInputRef}\n type=\"file\"\n accept=\".zip,application/zip\"\n className=\"hidden\"\n data-testid=\"node-lifecycle-zip-input\"\n onChange={handlePackageSelected}\n />\n <button\n type=\"button\"\n disabled={uploading || replacingPackage}\n onClick={() => zipInputRef.current?.click()}\n className=\"inline-flex items-center gap-2 rounded-md border border-border-seam px-4 py-2 text-sm font-medium hover:bg-accent disabled:opacity-50\"\n >\n {uploading ? (\n <Loader2 size={16} className=\"animate-spin\" />\n ) : (\n <Upload size={16} />\n )}\n {version.packageUrl\n ? tr(\"devportal.nodeLifecycle.replaceZip\", \"Replace ZIP\")\n : tr(\"devportal.nodeLifecycle.uploadZip\", \"Upload ZIP\")}\n </button>\n </>\n )}\n </section>\n\n <div className=\"grid grid-cols-1 gap-4 lg:grid-cols-2\">\n <ChecksPanel lifecycle={lifecycle} tr={tr} />\n <ManifestPreview manifest={version.manifest} tr={tr} />\n </div>\n\n <section\n className=\"flex flex-col gap-4 rounded-card border border-border-seam bg-bg-surface p-5 lg:flex-row lg:items-center lg:justify-between\"\n data-testid=\"node-lifecycle-deploy\"\n >\n <div className=\"flex flex-col gap-2\">\n <span className=\"text-sm font-semibold\">\n {tr(\"devportal.nodeLifecycle.visibility\", \"Visibility\")}\n </span>\n <div\n role=\"radiogroup\"\n aria-label={tr(\"devportal.nodeLifecycle.visibility\", \"Visibility\")}\n className=\"inline-flex w-fit overflow-hidden rounded-md border border-border-seam\"\n >\n {(\n [\n [\n \"private\",\n <Lock key=\"i\" size={14} />,\n tr(\"devportal.nodeLifecycle.private\", \"Workspace-private\"),\n ],\n [\n \"store\",\n <Globe key=\"i\" size={14} />,\n tr(\"devportal.nodeLifecycle.store\", \"Submit to store\"),\n ],\n ] as const\n ).map(([value, icon, label]) => {\n const selected = visibility === value;\n return (\n <span\n key={value}\n role=\"radio\"\n aria-checked={selected}\n aria-disabled={!selected}\n data-visibility={value}\n className={cn(\n \"inline-flex items-center gap-2 px-4 py-2 text-sm\",\n selected\n ? \"bg-status-info-bg-subtle font-medium text-status-info-text\"\n : \"text-text-secondary\",\n )}\n >\n {icon}\n {label}\n </span>\n );\n })}\n </div>\n <p className=\"max-w-xl text-xs text-text-secondary\">\n {visibility === \"private\"\n ? tr(\n \"devportal.nodeLifecycle.privateHint\",\n \"Private nodes skip platform review: deploying approves the version for your organization and only its workspaces can install it.\",\n )\n : tr(\n \"devportal.nodeLifecycle.storeHint\",\n \"Store nodes are reviewed by the platform team and deploy to the public Node Store once approved.\",\n )}{\" \"}\n <button\n type=\"button\"\n className=\"font-medium text-status-info-text hover:underline\"\n onClick={() => go(`/apps/${appId}/edit`)}\n >\n {tr(\n \"devportal.nodeLifecycle.changeVisibility\",\n \"Change visibility\",\n )}\n </button>\n </p>\n </div>\n <div className=\"flex flex-col items-stretch gap-2 lg:items-end\">\n <div className=\"flex flex-wrap gap-2\">\n <button\n type=\"button\"\n onClick={() => go(`/apps/${appId}/versions`)}\n className=\"inline-flex items-center justify-center gap-2 rounded-md border border-border-seam px-4 py-2 text-sm font-medium hover:bg-accent\"\n >\n <BookOpen size={16} />\n {tr(\"devportal.nodeLifecycle.allVersions\", \"All versions\")}\n </button>\n {lifecycle.steps[4].status !== \"complete\" && (\n <button\n type=\"button\"\n onClick={handleDeploy}\n disabled={deployDisabled}\n aria-disabled={deployDisabled}\n data-testid=\"node-lifecycle-deploy-button\"\n className=\"inline-flex items-center justify-center gap-2 rounded-md bg-action-primary-bg px-5 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 disabled:cursor-not-allowed disabled:opacity-50\"\n >\n {deploying ? (\n <Loader2 size={16} className=\"animate-spin\" />\n ) : visibility === \"private\" ? (\n <Building2 size={16} />\n ) : (\n <Rocket size={16} />\n )}\n {deployLabel}\n </button>\n )}\n </div>\n {blocker && lifecycle.steps[4].status !== \"complete\" && (\n <p\n className=\"max-w-sm text-xs text-text-secondary lg:text-right\"\n data-testid=\"node-lifecycle-deploy-blocker\"\n data-blocker={blocker}\n >\n {tr(blockerKey, blockerFallback)}\n </p>\n )}\n {lifecycle.steps[4].status === \"complete\" && (\n <p className=\"inline-flex items-center gap-1 text-sm font-medium text-status-success-text\">\n <CheckCircle2 size={16} />\n {stepReason(tr, lifecycle.steps[4])}\n </p>\n )}\n </div>\n </section>\n </PageLayout>\n );\n};\n\nexport default NodeLifecyclePage;\n"],"mappings":"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"}
@@ -1,4 +1,2 @@
1
1
  import { FC } from 'react';
2
-
3
2
  export declare const OAuthCallbackPage: FC;
4
- //# sourceMappingURL=OAuthCallbackPage.d.ts.map
@@ -1,12 +1,12 @@
1
- import { useDevportal as e } from "../providers/DevportalProvider.js";
2
- import { useCompleteAppOAuthMutation as t } from "../../generated/global-operations.js";
1
+ import { useCompleteAppOAuthMutation as e } from "../../generated/global-operations.js";
2
+ import { useDevportal as t } from "../providers/DevportalProvider.js";
3
3
  import { useEffect as n, useState as r } from "react";
4
4
  import { CheckCircle as i, Loader2 as a, XCircle as o } from "lucide-react";
5
5
  import { useSearchParams as s } from "react-router";
6
6
  import { jsx as c, jsxs as l } from "react/jsx-runtime";
7
- //#region src/devportal/pages/OAuthCallbackPage.tsx
7
+ // src/devportal/pages/OAuthCallbackPage.tsx
8
8
  var u = () => {
9
- let [u] = s(), { navigate: d, basePath: f } = e(), [p, m] = r("loading"), [h, g] = r(""), [_] = t();
9
+ let [u] = s(), { navigate: d, basePath: f } = t(), [p, m] = r("loading"), [h, g] = r(""), [_] = e();
10
10
  return n(() => {
11
11
  let e = u.get("code"), t = u.get("state"), n = localStorage.getItem("oauth_pending");
12
12
  if (!n || !e || !t) {
@@ -58,7 +58,6 @@ var u = () => {
58
58
  ]
59
59
  });
60
60
  };
61
- //#endregion
62
61
  export { u as OAuthCallbackPage };
63
62
 
64
63
  //# sourceMappingURL=OAuthCallbackPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OAuthCallbackPage.js","names":[],"sources":["../../../src/devportal/pages/OAuthCallbackPage.tsx"],"sourcesContent":["import type { FC } from \"react\";\nimport { useEffect, useState } from \"react\";\nimport { useSearchParams } from \"react-router\";\nimport { CheckCircle, XCircle, Loader2 } from \"lucide-react\";\nimport { useCompleteAppOAuthMutation } from \"../../generated/global-operations\";\nimport { useDevportal } from \"../providers/DevportalProvider\";\n\nexport const OAuthCallbackPage: FC = () => {\n const [searchParams] = useSearchParams();\n const { navigate, basePath } = useDevportal();\n const [status, setStatus] = useState<\"loading\" | \"success\" | \"error\">(\n \"loading\",\n );\n const [errorMsg, setErrorMsg] = useState(\"\");\n const [completeOAuth] = useCompleteAppOAuthMutation();\n\n useEffect(() => {\n const code = searchParams.get(\"code\");\n const state = searchParams.get(\"state\");\n const stored = localStorage.getItem(\"oauth_pending\");\n if (!stored || !code || !state) {\n setStatus(\"error\");\n setErrorMsg(\"Missing OAuth parameters.\");\n return;\n }\n let parsed: { installationId: string; redirectUri: string };\n try {\n parsed = JSON.parse(stored) as {\n installationId: string;\n redirectUri: string;\n };\n } catch {\n setStatus(\"error\");\n setErrorMsg(\"Invalid OAuth session data.\");\n return;\n }\n const { installationId, redirectUri } = parsed;\n completeOAuth({ variables: { installationId, code, state, redirectUri } })\n .then(() => {\n localStorage.removeItem(\"oauth_pending\");\n setStatus(\"success\");\n setTimeout(() => navigate?.(`${basePath ?? \"\"}/apps`), 1500);\n })\n .catch((err: Error) => {\n setStatus(\"error\");\n setErrorMsg(err.message);\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n if (status === \"loading\") {\n return (\n <div className=\"flex flex-col items-center justify-center min-h-[60vh] gap-4\">\n <Loader2 className=\"h-8 w-8 animate-spin text-primary\" />\n <p className=\"text-sm text-muted-foreground\">\n Completing authorization…\n </p>\n </div>\n );\n }\n\n if (status === \"success\") {\n return (\n <div className=\"flex flex-col items-center justify-center min-h-[60vh] gap-4\">\n <CheckCircle className=\"h-8 w-8 text-status-success-text\" />\n <p className=\"text-sm font-medium\">\n Authorization successful! Redirecting…\n </p>\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-col items-center justify-center min-h-[60vh] gap-4\">\n <XCircle className=\"h-8 w-8 text-status-error-text\" />\n <p className=\"text-sm font-medium text-status-error-text\">\n Authorization failed\n </p>\n {errorMsg && <p className=\"text-xs text-muted-foreground\">{errorMsg}</p>}\n </div>\n );\n};\n"],"mappings":";;;;;;;AAOA,IAAa,UAA8B;CACzC,IAAM,CAAC,KAAgB,GAAiB,EAClC,EAAE,aAAU,gBAAa,GAAc,EACvC,CAAC,GAAQ,KAAa,EAC1B,UACD,EACK,CAAC,GAAU,KAAe,EAAS,GAAG,EACtC,CAAC,KAAiB,GAA6B;AA0DrD,QAxDA,QAAgB;EACd,IAAM,IAAO,EAAa,IAAI,OAAO,EAC/B,IAAQ,EAAa,IAAI,QAAQ,EACjC,IAAS,aAAa,QAAQ,gBAAgB;AACpD,MAAI,CAAC,KAAU,CAAC,KAAQ,CAAC,GAAO;AAE9B,GADA,EAAU,QAAQ,EAClB,EAAY,4BAA4B;AACxC;;EAEF,IAAI;AACJ,MAAI;AACF,OAAS,KAAK,MAAM,EAAO;UAIrB;AAEN,GADA,EAAU,QAAQ,EAClB,EAAY,8BAA8B;AAC1C;;EAEF,IAAM,EAAE,mBAAgB,mBAAgB;AACxC,IAAc,EAAE,WAAW;GAAE;GAAgB;GAAM;GAAO;GAAa,EAAE,CAAC,CACvE,WAAW;AAGV,GAFA,aAAa,WAAW,gBAAgB,EACxC,EAAU,UAAU,EACpB,iBAAiB,IAAW,GAAG,KAAY,GAAG,OAAO,EAAE,KAAK;IAC5D,CACD,OAAO,MAAe;AAErB,GADA,EAAU,QAAQ,EAClB,EAAY,EAAI,QAAQ;IACxB;IAEH,EAAE,CAAC,EAEF,MAAW,YAEX,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,GAAD,EAAS,WAAU,qCAAsC,CAAA,EACzD,kBAAC,KAAD;GAAG,WAAU;aAAgC;GAEzC,CAAA,CACA;MAIN,MAAW,YAEX,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,GAAD,EAAa,WAAU,oCAAqC,CAAA,EAC5D,kBAAC,KAAD;GAAG,WAAU;aAAsB;GAE/B,CAAA,CACA;MAKR,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,GAAD,EAAS,WAAU,kCAAmC,CAAA;GACtD,kBAAC,KAAD;IAAG,WAAU;cAA6C;IAEtD,CAAA;GACH,KAAY,kBAAC,KAAD;IAAG,WAAU;cAAiC;IAAa,CAAA;GACpE"}
1
+ {"version":3,"file":"OAuthCallbackPage.js","names":["OAuthCallbackPage","searchParams","useSearchParams","useDevportal","status","setStatus","useState","errorMsg","setErrorMsg","completeOAuth","useCompleteAppOAuthMutation","useEffect","code","state","stored","parsed","navigate","basePath","err","Loader2","CheckCircle","XCircle"],"sources":["../../../src/devportal/pages/OAuthCallbackPage.tsx"],"sourcesContent":["import type { FC } from \"react\";\nimport { useEffect, useState } from \"react\";\nimport { useSearchParams } from \"react-router\";\nimport { CheckCircle, XCircle, Loader2 } from \"lucide-react\";\nimport { useCompleteAppOAuthMutation } from \"../../generated/global-operations\";\nimport { useDevportal } from \"../providers/DevportalProvider\";\n\nexport const OAuthCallbackPage: FC = () => {\n const [searchParams] = useSearchParams();\n const { navigate, basePath } = useDevportal();\n const [status, setStatus] = useState<\"loading\" | \"success\" | \"error\">(\n \"loading\",\n );\n const [errorMsg, setErrorMsg] = useState(\"\");\n const [completeOAuth] = useCompleteAppOAuthMutation();\n\n useEffect(() => {\n const code = searchParams.get(\"code\");\n const state = searchParams.get(\"state\");\n const stored = localStorage.getItem(\"oauth_pending\");\n if (!stored || !code || !state) {\n setStatus(\"error\");\n setErrorMsg(\"Missing OAuth parameters.\");\n return;\n }\n let parsed: { installationId: string; redirectUri: string };\n try {\n parsed = JSON.parse(stored) as {\n installationId: string;\n redirectUri: string;\n };\n } catch {\n setStatus(\"error\");\n setErrorMsg(\"Invalid OAuth session data.\");\n return;\n }\n const { installationId, redirectUri } = parsed;\n completeOAuth({ variables: { installationId, code, state, redirectUri } })\n .then(() => {\n localStorage.removeItem(\"oauth_pending\");\n setStatus(\"success\");\n setTimeout(() => navigate?.(`${basePath ?? \"\"}/apps`), 1500);\n })\n .catch((err: Error) => {\n setStatus(\"error\");\n setErrorMsg(err.message);\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n if (status === \"loading\") {\n return (\n <div className=\"flex flex-col items-center justify-center min-h-[60vh] gap-4\">\n <Loader2 className=\"h-8 w-8 animate-spin text-primary\" />\n <p className=\"text-sm text-muted-foreground\">\n Completing authorization…\n </p>\n </div>\n );\n }\n\n if (status === \"success\") {\n return (\n <div className=\"flex flex-col items-center justify-center min-h-[60vh] gap-4\">\n <CheckCircle className=\"h-8 w-8 text-status-success-text\" />\n <p className=\"text-sm font-medium\">\n Authorization successful! Redirecting…\n </p>\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-col items-center justify-center min-h-[60vh] gap-4\">\n <XCircle className=\"h-8 w-8 text-status-error-text\" />\n <p className=\"text-sm font-medium text-status-error-text\">\n Authorization failed\n </p>\n {errorMsg && <p className=\"text-xs text-muted-foreground\">{errorMsg}</p>}\n </div>\n );\n};\n"],"mappings":";;;;;;;AAOA,IAAaA,UAA8B;CACzC,IAAM,CAACC,KAAgBC,EAAgB,GACjC,EAAE,aAAU,gBAAaC,EAAa,GACtC,CAACC,GAAQC,KAAaC,EAC1B,SACF,GACM,CAACC,GAAUC,KAAeF,EAAS,EAAE,GACrC,CAACG,KAAiBC,EAA4B;CA0DpD,OAxDAC,QAAgB;EACd,IAAMC,IAAOX,EAAa,IAAI,MAAM,GAC9BY,IAAQZ,EAAa,IAAI,OAAO,GAChCa,IAAS,aAAa,QAAQ,eAAe;EACnD,IAAI,CAACA,KAAU,CAACF,KAAQ,CAACC,GAAO;GAE9B,AADAR,EAAU,OAAO,GACjBG,EAAY,2BAA2B;GACvC;EACF;EACA,IAAIO;EACJ,IAAI;GACF,IAAS,KAAK,MAAMD,CAAM;EAI5B,QAAQ;GAEN,AADAT,EAAU,OAAO,GACjBG,EAAY,6BAA6B;GACzC;EACF;EACA,IAAM,EAAE,mBAAgB,mBAAgBO;EACxC,EAAc,EAAE,WAAW;GAAE;GAAgB;GAAM;GAAO;EAAY,EAAE,CAAC,CAAC,CACvE,WAAW;GAGV,AAFA,aAAa,WAAW,eAAe,GACvCV,EAAU,SAAS,GACnB,iBAAiBW,IAAW,GAAGC,KAAY,GAAG,MAAM,GAAG,IAAI;EAC7D,CAAC,CAAC,CACD,OAAO,MAAe;GAErB,AADAZ,EAAU,OAAO,GACjBG,EAAYU,EAAI,OAAO;EACzB,CAAC;CAEL,GAAG,CAAC,CAAC,GAEDd,MAAW,YAEX,kBAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACE,kBAACe,GAAD,EAAS,WAAU,oCAAqC,CAAA,GACxD,kBAAC,KAAD;GAAG,WAAU;GAAgC,UAAA;EAE1C,CAAA,CACA;C,KAILf,MAAW,YAEX,kBAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACE,kBAACgB,GAAD,EAAa,WAAU,mCAAoC,CAAA,GAC3D,kBAAC,KAAD;GAAG,WAAU;GAAsB,UAAA;EAEhC,CAAA,CACA;C,KAKP,kBAAC,OAAD;EAAK,WAAU;EAAf,UAAA;GACE,kBAACC,GAAD,EAAS,WAAU,iCAAkC,CAAA;GACrD,kBAAC,KAAD;IAAG,WAAU;IAA6C,UAAA;GAEvD,CAAA;GACFd,KAAY,kBAAC,KAAD;IAAG,WAAU;IAAiC,UAAAA;GAAY,CAAA;EACpE;;AAET"}
@@ -1,5 +1,4 @@
1
1
  import { FC } from 'react';
2
-
3
2
  /**
4
3
  * OAuth App Detail page
5
4
  *
@@ -7,4 +6,3 @@ import { FC } from 'react';
7
6
  * Supports secret rotation, deactivation, and status toggle.
8
7
  */
9
8
  export declare const OAuthClientDetailPage: FC;
10
- //# sourceMappingURL=OAuthClientDetailPage.d.ts.map
@@ -1,12 +1,12 @@
1
- import { useDevportal as e } from "../providers/DevportalProvider.js";
2
- import { cn as t } from "../utils/cn.js";
1
+ import { PageLayout as e } from "../components/PageLayout.js";
2
+ import { ActiveIndicator as t } from "../components/StatusBadge.js";
3
3
  import { useDeactivateAppMutation as n, useGetAuthAppQuery as r, useRotateAppSecretMutation as i, useUpdateAuthAppMutation as a } from "../../generated/global-operations.js";
4
4
  import { getErrorMessage as ee } from "../hooks/useGraphQL.js";
5
- import { PageLayout as o } from "../components/PageLayout.js";
6
- import { ActiveIndicator as te } from "../components/StatusBadge.js";
7
- import { nativeCopyText as ne, nativeImpact as s, nativeNotify as c } from "../../utils/nativeBridge.js";
8
- import { PermissionGuard as re } from "../components/PermissionGuard.js";
5
+ import { useDevportal as o } from "../providers/DevportalProvider.js";
9
6
  import "../components/index.js";
7
+ import { cn as te } from "../utils/cn.js";
8
+ import { PermissionGuard as ne } from "../components/PermissionGuard.js";
9
+ import { nativeCopyText as s, nativeImpact as c, nativeNotify as re } from "../../utils/nativeBridge.js";
10
10
  import "../hooks/index.js";
11
11
  import { useState as l } from "react";
12
12
  import { AlertCircle as ie, ArrowLeft as ae, Copy as u, Eye as d, EyeOff as f, Loader2 as p, RefreshCw as m, Trash2 as h } from "lucide-react";
@@ -14,9 +14,9 @@ import { useParams as g } from "react-router";
14
14
  import { jsx as _, jsxs as v } from "react/jsx-runtime";
15
15
  import { useI18n as y } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
16
16
  import { AlertDialog as b, AlertDialogAction as x, AlertDialogCancel as S, AlertDialogContent as C, AlertDialogDescription as w, AlertDialogFooter as T, AlertDialogHeader as E, AlertDialogTitle as D, CTAOverflowMenu as O, GlassCard as k } from "@burdenoff/fe-libs/ui";
17
- //#region src/devportal/pages/OAuthClientDetailPage.tsx
17
+ // src/devportal/pages/OAuthClientDetailPage.tsx
18
18
  var A = () => {
19
- let { clientId: A } = g(), { navigate: j, basePath: M } = e(), { t: N } = y(), P = (e, t) => {
19
+ let { clientId: A } = g(), { navigate: j, basePath: M } = o(), { t: N } = y(), P = (e, t) => {
20
20
  let n = N(e);
21
21
  return n === e ? t : n;
22
22
  }, [F, I] = l(!1), [L, R] = l(null), [z, B] = l(!1), [V, H] = l(!1), { data: U, loading: W, error: G, refetch: K } = r({
@@ -39,7 +39,9 @@ var A = () => {
39
39
  } : null, Q = (e) => {
40
40
  j?.(`${M}${e}`);
41
41
  }, $ = async (e) => {
42
- s("light"), c(await ne(e) ? "success" : "error");
42
+ c("light");
43
+ let t = await s(e);
44
+ re(t ? "success" : "error");
43
45
  }, se = async () => {
44
46
  if (A) try {
45
47
  let e = (await q({ variables: { id: A } })).data?.rotateAppSecret?.clientSecret;
@@ -50,7 +52,7 @@ var A = () => {
50
52
  await Y({ variables: { id: A } }), B(!1), Q("/oauth");
51
53
  } catch {}
52
54
  };
53
- return W && !U ? /* @__PURE__ */ _(o, {
55
+ return W && !U ? /* @__PURE__ */ _(e, {
54
56
  title: P("devportal.appDetails", "App Details"),
55
57
  description: P("devportal.loadingDots", "Loading..."),
56
58
  backLink: "/oauth",
@@ -59,7 +61,7 @@ var A = () => {
59
61
  className: "flex items-center justify-center py-12",
60
62
  children: /* @__PURE__ */ _(p, { className: "h-8 w-8 animate-spin text-text-secondary" })
61
63
  })
62
- }) : G || !Z ? /* @__PURE__ */ _(o, {
64
+ }) : G || !Z ? /* @__PURE__ */ _(e, {
63
65
  title: P("devportal.appDetails", "App Details"),
64
66
  description: P("devportal.failedToLoad", "Failed to load"),
65
67
  backLink: "/oauth",
@@ -83,9 +85,9 @@ var A = () => {
83
85
  })
84
86
  ]
85
87
  })
86
- }) : /* @__PURE__ */ _(re, {
88
+ }) : /* @__PURE__ */ _(ne, {
87
89
  authOnly: !0,
88
- children: /* @__PURE__ */ v(o, {
90
+ children: /* @__PURE__ */ v(e, {
89
91
  title: Z.name,
90
92
  description: Z.description || P("devportal.oauthAppDetailsAndCredentials", "OAuth App details and credentials"),
91
93
  purpose: P("devportal.oauthAppDetailPurpose", "These are this OAuth app's credentials and the scopes it may request. Copy the client ID for your integration, rotate the secret if it leaks, and keep scopes minimal so users only grant what the app truly needs."),
@@ -130,7 +132,7 @@ var A = () => {
130
132
  children: P("devportal.status", "Status")
131
133
  }), /* @__PURE__ */ v("div", {
132
134
  className: "flex items-center gap-2",
133
- children: [/* @__PURE__ */ _(te, { active: Z.status === "ACTIVE" }), /* @__PURE__ */ _("span", {
135
+ children: [/* @__PURE__ */ _(t, { active: Z.status === "ACTIVE" }), /* @__PURE__ */ _("span", {
134
136
  className: "text-sm font-medium",
135
137
  children: Z.status
136
138
  })]
@@ -142,7 +144,7 @@ var A = () => {
142
144
  className: "text-sm text-text-secondary",
143
145
  children: P("devportal.type", "Type")
144
146
  }), /* @__PURE__ */ _("span", {
145
- className: t("rounded px-2 py-0.5 text-xs font-medium", Z.type === "SERVICE" ? "bg-accent-purple-subtle text-accent-purple" : Z.type === "INTEGRATION" || Z.type === "API_INTEGRATION" ? "bg-status-info-bg-subtle text-status-info-text" : "bg-status-success-bg-subtle text-status-success-text"),
147
+ className: te("rounded px-2 py-0.5 text-xs font-medium", Z.type === "SERVICE" ? "bg-accent-purple-subtle text-accent-purple" : Z.type === "INTEGRATION" || Z.type === "API_INTEGRATION" ? "bg-status-info-bg-subtle text-status-info-text" : "bg-status-success-bg-subtle text-status-success-text"),
146
148
  children: Z.type
147
149
  })]
148
150
  }),
@@ -304,7 +306,6 @@ var A = () => {
304
306
  })
305
307
  });
306
308
  };
307
- //#endregion
308
309
  export { A as OAuthClientDetailPage };
309
310
 
310
311
  //# sourceMappingURL=OAuthClientDetailPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OAuthClientDetailPage.js","names":[],"sources":["../../../src/devportal/pages/OAuthClientDetailPage.tsx"],"sourcesContent":["import type { FC } from \"react\";\nimport { useState } from \"react\";\nimport {\n Copy,\n Eye,\n EyeOff,\n Loader2,\n AlertCircle,\n RefreshCw,\n Trash2,\n ArrowLeft,\n} from \"lucide-react\";\nimport { useI18n } from \"@burdenoff/fe-libs/shared/providers/shell/I18nProvider\";\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n CTAOverflowMenu,\n GlassCard,\n} from \"@burdenoff/fe-libs/ui\";\nimport { useParams } from \"react-router\";\nimport { PageLayout } from \"../components/PageLayout\";\nimport { ActiveIndicator } from \"../components/StatusBadge\";\nimport { useDevportal } from \"../providers/DevportalProvider\";\nimport { PermissionGuard } from \"../components\";\nimport type { AuthApp } from \"../types\";\nimport { cn } from \"../utils/cn\";\nimport {\n nativeCopyText,\n nativeImpact,\n nativeNotify,\n} from \"../../utils/nativeBridge\";\nimport {\n useGetAuthAppQuery,\n useRotateAppSecretMutation,\n useDeactivateAppMutation,\n useUpdateAuthAppMutation,\n getErrorMessage,\n} from \"../hooks\";\n\n/**\n * OAuth App Detail page\n *\n * Shows details for an auth-svc App (replaces devportal-svc OAuthClient detail).\n * Supports secret rotation, deactivation, and status toggle.\n */\nexport const OAuthClientDetailPage: FC = () => {\n const { clientId: appId } = useParams<{ clientId: string }>();\n const { navigate, basePath } = useDevportal();\n const { t } = useI18n();\n const tr = (key: string, fallback: string): string => {\n const value = t(key);\n return value === key ? fallback : value;\n };\n const [showSecret, setShowSecret] = useState(false);\n const [newSecret, setNewSecret] = useState<string | null>(null);\n const [confirmDelete, setConfirmDelete] = useState(false);\n const [confirmRotate, setConfirmRotate] = useState(false);\n\n const { data, loading, error, refetch } = useGetAuthAppQuery({\n variables: { id: appId || \"\" },\n skip: !appId,\n fetchPolicy: \"cache-and-network\",\n });\n\n const [rotateSecret, { loading: rotating }] = useRotateAppSecretMutation();\n const [deactivateApp, { loading: deactivating }] = useDeactivateAppMutation();\n const [updateApp] = useUpdateAuthAppMutation();\n\n const app: AuthApp | null = data?.app\n ? {\n id: data.app.id,\n name: data.app.name,\n description: data.app.description ?? undefined,\n clientId: data.app.clientId,\n type: data.app.type as AuthApp[\"type\"],\n status: data.app.status as AuthApp[\"status\"],\n scopes: data.app.scopes ?? [],\n redirectUris: data.app.redirectUris ?? [],\n ownerUserId: data.app.ownerUserId,\n tenantId: data.app.tenantId,\n createdAt: data.app.createdAt,\n updatedAt: data.app.updatedAt,\n }\n : null;\n\n const handleNavigate = (path: string) => {\n navigate?.(`${basePath}${path}`);\n };\n\n const handleCopy = async (text: string) => {\n void nativeImpact(\"light\");\n const ok = await nativeCopyText(text);\n void nativeNotify(ok ? \"success\" : \"error\");\n };\n\n const handleRotateSecret = async () => {\n if (!appId) return;\n try {\n const result = await rotateSecret({ variables: { id: appId } });\n const secret = result.data?.rotateAppSecret?.clientSecret;\n if (secret) {\n setNewSecret(secret);\n setShowSecret(true);\n }\n setConfirmRotate(false);\n refetch();\n } catch {\n // error handled by Apollo\n }\n };\n\n const handleDeactivate = async () => {\n if (!appId) return;\n try {\n await deactivateApp({ variables: { id: appId } });\n setConfirmDelete(false);\n handleNavigate(\"/oauth\");\n } catch {\n // error handled by Apollo\n }\n };\n\n const handleToggleStatus = async () => {\n if (!appId || !app) return;\n const newStatus = app.status === \"ACTIVE\" ? \"INACTIVE\" : \"ACTIVE\";\n try {\n await updateApp({\n variables: { id: appId, input: { status: newStatus } },\n });\n refetch();\n } catch {\n // error handled by Apollo\n }\n };\n\n if (loading && !data) {\n return (\n <PageLayout\n title={tr(\"devportal.appDetails\", \"App Details\")}\n description={tr(\"devportal.loadingDots\", \"Loading...\")}\n backLink=\"/oauth\"\n backLabel={tr(\"devportal.backToApps\", \"Back to Apps\")}\n >\n <div className=\"flex items-center justify-center py-12\">\n <Loader2 className=\"h-8 w-8 animate-spin text-text-secondary\" />\n </div>\n </PageLayout>\n );\n }\n\n if (error || !app) {\n return (\n <PageLayout\n title={tr(\"devportal.appDetails\", \"App Details\")}\n description={tr(\"devportal.failedToLoad\", \"Failed to load\")}\n backLink=\"/oauth\"\n backLabel={tr(\"devportal.backToApps\", \"Back to Apps\")}\n >\n <div className=\"rounded-lg border border-status-error-border/50 bg-status-error-bg/10 p-6 text-center\">\n <AlertCircle className=\"mx-auto h-8 w-8 text-status-error-text\" />\n <h3 className=\"mt-2 font-medium text-status-error-text\">\n {error\n ? tr(\"devportal.failedToLoadApp\", \"Failed to load app\")\n : tr(\"devportal.appNotFound\", \"App not found\")}\n </h3>\n {error && (\n <p className=\"mt-1 text-sm text-text-secondary\">\n {getErrorMessage(error)}\n </p>\n )}\n <button\n onClick={() => handleNavigate(\"/oauth\")}\n className=\"mt-4 inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90\"\n >\n <ArrowLeft size={16} />\n {tr(\"devportal.backToApps\", \"Back to Apps\")}\n </button>\n </div>\n </PageLayout>\n );\n }\n\n return (\n <PermissionGuard authOnly>\n <PageLayout\n title={app.name}\n description={\n app.description ||\n tr(\n \"devportal.oauthAppDetailsAndCredentials\",\n \"OAuth App details and credentials\",\n )\n }\n purpose={tr(\n \"devportal.oauthAppDetailPurpose\",\n \"These are this OAuth app's credentials and the scopes it may request. Copy the client ID for your integration, rotate the secret if it leaks, and keep scopes minimal so users only grant what the app truly needs.\",\n )}\n backLink=\"/oauth\"\n backLabel={tr(\"devportal.backToApps\", \"Back to Apps\")}\n actions={\n <CTAOverflowMenu\n primary={{\n label:\n app.status === \"ACTIVE\"\n ? tr(\"devportal.deactivate\", \"Deactivate\")\n : tr(\"devportal.activate\", \"Activate\"),\n onSelect: handleToggleStatus,\n }}\n actions={[\n {\n label: tr(\"devportal.delete\", \"Delete\"),\n icon: <Trash2 size={16} />,\n intent: \"destructive\",\n onSelect: () => setConfirmDelete(true),\n },\n ]}\n />\n }\n >\n {/* Status & Type */}\n <div className=\"grid gap-6 md:grid-cols-2\">\n <div className=\"rounded-card border border-border-seam bg-bg-surface p-6\">\n <h3 className=\"text-sm font-medium text-text-secondary mb-4\">\n {tr(\"devportal.statusAndConfiguration\", \"Status & Configuration\")}\n </h3>\n <div className=\"space-y-3\">\n <div className=\"flex justify-between\">\n <span className=\"text-sm text-text-secondary\">\n {tr(\"devportal.status\", \"Status\")}\n </span>\n <div className=\"flex items-center gap-2\">\n <ActiveIndicator active={app.status === \"ACTIVE\"} />\n <span className=\"text-sm font-medium\">{app.status}</span>\n </div>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-sm text-text-secondary\">\n {tr(\"devportal.type\", \"Type\")}\n </span>\n <span\n className={cn(\n \"rounded px-2 py-0.5 text-xs font-medium\",\n app.type === \"SERVICE\"\n ? \"bg-accent-purple-subtle text-accent-purple\"\n : app.type === \"INTEGRATION\" ||\n app.type === \"API_INTEGRATION\"\n ? \"bg-status-info-bg-subtle text-status-info-text\"\n : \"bg-status-success-bg-subtle text-status-success-text\",\n )}\n >\n {app.type}\n </span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-sm text-text-secondary\">\n {tr(\"devportal.created\", \"Created\")}\n </span>\n <span className=\"text-sm\">\n {new Date(app.createdAt).toLocaleDateString()}\n </span>\n </div>\n </div>\n </div>\n\n {/* Credentials — primary emphasis zone */}\n <GlassCard treatment=\"glass\" glow className=\"p-6\">\n <h3 className=\"text-sm font-medium text-text-secondary mb-4\">\n {tr(\"devportal.credentials\", \"Credentials\")}\n </h3>\n <div className=\"space-y-3\">\n <div>\n <label className=\"text-xs text-text-secondary\">\n {tr(\"devportal.clientId\", \"Client ID\")}\n </label>\n <div className=\"mt-1 flex items-center gap-2\">\n <code className=\"flex-1 rounded bg-bg-sunken px-3 py-1.5 text-sm font-mono\">\n {app.clientId}\n </code>\n <button\n onClick={() => handleCopy(app.clientId)}\n className=\"rounded p-1.5 hover:bg-bg-sunken transition-colors\"\n title=\"Copy\"\n >\n <Copy size={14} />\n </button>\n </div>\n </div>\n {newSecret && (\n <div>\n <label className=\"text-xs text-status-error-text font-medium\">\n {tr(\n \"devportal.newClientSecretShownOnce\",\n \"New Client Secret (shown only once!)\",\n )}\n </label>\n <div className=\"mt-1 flex items-center gap-2\">\n <code className=\"flex-1 rounded bg-status-error-bg/10 border border-status-error-border/30 px-3 py-1.5 text-sm font-mono\">\n {showSecret\n ? newSecret\n : \"\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022\"}\n </code>\n <button\n onClick={() => setShowSecret(!showSecret)}\n className=\"rounded p-1.5 hover:bg-bg-sunken transition-colors\"\n >\n {showSecret ? <EyeOff size={14} /> : <Eye size={14} />}\n </button>\n <button\n onClick={() => handleCopy(newSecret)}\n className=\"rounded p-1.5 hover:bg-bg-sunken transition-colors\"\n >\n <Copy size={14} />\n </button>\n </div>\n </div>\n )}\n <button\n onClick={() => setConfirmRotate(true)}\n disabled={rotating}\n className=\"mt-2 inline-flex items-center gap-2 rounded-md bg-status-warning-bg-subtle px-3 py-1.5 text-sm font-medium text-status-warning-text hover:bg-status-warning-bg-subtle transition-colors disabled:opacity-50\"\n >\n <RefreshCw\n size={14}\n className={rotating ? \"animate-spin\" : \"\"}\n />\n {tr(\"devportal.rotateSecret\", \"Rotate Secret\")}\n </button>\n </div>\n </GlassCard>\n </div>\n\n {/* Scopes */}\n <div className=\"rounded-card border border-border-seam bg-bg-surface p-6\">\n <h3 className=\"text-sm font-medium text-text-secondary mb-3\">\n {tr(\"devportal.scopes\", \"Scopes\")} ({app.scopes.length})\n </h3>\n {app.scopes.length > 0 ? (\n <div className=\"flex flex-wrap gap-2\">\n {app.scopes.map((scope) => (\n <span\n key={scope}\n className=\"rounded-full bg-action-primary-bg/10 px-3 py-1 text-xs font-medium text-primary\"\n >\n {scope}\n </span>\n ))}\n </div>\n ) : (\n <p className=\"text-sm text-text-secondary\">\n {tr(\"devportal.noScopesConfigured\", \"No scopes configured\")}\n </p>\n )}\n </div>\n\n {/* Redirect URIs */}\n <div className=\"rounded-card border border-border-seam bg-bg-surface p-6\">\n <h3 className=\"text-sm font-medium text-text-secondary mb-3\">\n {tr(\"devportal.redirectUris\", \"Redirect URIs\")} (\n {app.redirectUris.length})\n </h3>\n {app.redirectUris.length > 0 ? (\n <div className=\"space-y-2\">\n {app.redirectUris.map((uri) => (\n <div key={uri} className=\"flex items-center gap-2\">\n <code className=\"rounded bg-bg-sunken px-3 py-1.5 text-sm font-mono\">\n {uri}\n </code>\n <button\n onClick={() => handleCopy(uri)}\n className=\"rounded p-1 hover:bg-bg-sunken transition-colors\"\n >\n <Copy size={12} />\n </button>\n </div>\n ))}\n </div>\n ) : (\n <p className=\"text-sm text-text-secondary\">\n {tr(\n \"devportal.noRedirectUrisConfigured\",\n \"No redirect URIs configured\",\n )}\n </p>\n )}\n </div>\n\n {/* Confirm Rotate Dialog */}\n <AlertDialog open={confirmRotate} onOpenChange={setConfirmRotate}>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>\n {tr(\n \"devportal.rotateClientSecretQuestion\",\n \"Rotate Client Secret?\",\n )}\n </AlertDialogTitle>\n <AlertDialogDescription>\n {tr(\n \"devportal.rotateSecretWarning\",\n \"This will invalidate the current client secret. All integrations using the old secret will stop working immediately.\",\n )}\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel disabled={rotating}>\n {tr(\"devportal.cancel\", \"Cancel\")}\n </AlertDialogCancel>\n <AlertDialogAction\n onClick={(e) => {\n e.preventDefault();\n void handleRotateSecret();\n }}\n disabled={rotating}\n className=\"bg-status-warning-bg text-white hover:bg-status-warning-bg/90\"\n >\n {rotating\n ? tr(\"devportal.rotating\", \"Rotating...\")\n : tr(\"devportal.rotateSecret\", \"Rotate Secret\")}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n\n {/* Confirm Deactivate Dialog */}\n <AlertDialog open={confirmDelete} onOpenChange={setConfirmDelete}>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle className=\"text-status-error-text\">\n {tr(\"devportal.deactivateAppQuestion\", \"Deactivate App?\")}\n </AlertDialogTitle>\n <AlertDialogDescription>\n {tr(\n \"devportal.deactivateAppWarning\",\n \"This will deactivate the app and revoke all tokens. This action cannot be undone easily.\",\n )}\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel disabled={deactivating}>\n {tr(\"devportal.cancel\", \"Cancel\")}\n </AlertDialogCancel>\n <AlertDialogAction\n onClick={(e) => {\n e.preventDefault();\n void handleDeactivate();\n }}\n disabled={deactivating}\n className=\"bg-status-error-bg text-status-error-text hover:bg-status-error-bg/90\"\n >\n {deactivating\n ? tr(\"devportal.deactivating\", \"Deactivating...\")\n : tr(\"devportal.deactivate\", \"Deactivate\")}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </PageLayout>\n </PermissionGuard>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"OAuthClientDetailPage.js","names":["OAuthClientDetailPage","appId","useParams","useDevportal","useI18n","tr","value","t","key","fallback","showSecret","setShowSecret","useState","newSecret","setNewSecret","confirmDelete","setConfirmDelete","confirmRotate","setConfirmRotate","useGetAuthAppQuery","rotateSecret","rotating","useRotateAppSecretMutation","deactivateApp","deactivating","useDeactivateAppMutation","updateApp","useUpdateAuthAppMutation","app","data","handleNavigate","basePath","path","handleCopy","ok","nativeCopyText","text","handleRotateSecret","secret","refetch","handleDeactivate","loading","PageLayout","Loader2","error","AlertCircle","getErrorMessage","ArrowLeft","PermissionGuard","CTAOverflowMenu","newStatus","Trash2","ActiveIndicator","cn","GlassCard","Copy","jsx","EyeOff","Eye","RefreshCw","scope","uri","AlertDialog","AlertDialogContent","AlertDialogHeader","AlertDialogTitle","AlertDialogDescription","AlertDialogFooter","AlertDialogCancel","AlertDialogAction"],"sources":["../../../src/devportal/pages/OAuthClientDetailPage.tsx"],"sourcesContent":["import type { FC } from \"react\";\nimport { useState } from \"react\";\nimport {\n Copy,\n Eye,\n EyeOff,\n Loader2,\n AlertCircle,\n RefreshCw,\n Trash2,\n ArrowLeft,\n} from \"lucide-react\";\nimport { useI18n } from \"@burdenoff/fe-libs/shared/providers/shell/I18nProvider\";\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n CTAOverflowMenu,\n GlassCard,\n} from \"@burdenoff/fe-libs/ui\";\nimport { useParams } from \"react-router\";\nimport { PageLayout } from \"../components/PageLayout\";\nimport { ActiveIndicator } from \"../components/StatusBadge\";\nimport { useDevportal } from \"../providers/DevportalProvider\";\nimport { PermissionGuard } from \"../components\";\nimport type { AuthApp } from \"../types\";\nimport { cn } from \"../utils/cn\";\nimport {\n nativeCopyText,\n nativeImpact,\n nativeNotify,\n} from \"../../utils/nativeBridge\";\nimport {\n useGetAuthAppQuery,\n useRotateAppSecretMutation,\n useDeactivateAppMutation,\n useUpdateAuthAppMutation,\n getErrorMessage,\n} from \"../hooks\";\n\n/**\n * OAuth App Detail page\n *\n * Shows details for an auth-svc App (replaces devportal-svc OAuthClient detail).\n * Supports secret rotation, deactivation, and status toggle.\n */\nexport const OAuthClientDetailPage: FC = () => {\n const { clientId: appId } = useParams<{ clientId: string }>();\n const { navigate, basePath } = useDevportal();\n const { t } = useI18n();\n const tr = (key: string, fallback: string): string => {\n const value = t(key);\n return value === key ? fallback : value;\n };\n const [showSecret, setShowSecret] = useState(false);\n const [newSecret, setNewSecret] = useState<string | null>(null);\n const [confirmDelete, setConfirmDelete] = useState(false);\n const [confirmRotate, setConfirmRotate] = useState(false);\n\n const { data, loading, error, refetch } = useGetAuthAppQuery({\n variables: { id: appId || \"\" },\n skip: !appId,\n fetchPolicy: \"cache-and-network\",\n });\n\n const [rotateSecret, { loading: rotating }] = useRotateAppSecretMutation();\n const [deactivateApp, { loading: deactivating }] = useDeactivateAppMutation();\n const [updateApp] = useUpdateAuthAppMutation();\n\n const app: AuthApp | null = data?.app\n ? {\n id: data.app.id,\n name: data.app.name,\n description: data.app.description ?? undefined,\n clientId: data.app.clientId,\n type: data.app.type as AuthApp[\"type\"],\n status: data.app.status as AuthApp[\"status\"],\n scopes: data.app.scopes ?? [],\n redirectUris: data.app.redirectUris ?? [],\n ownerUserId: data.app.ownerUserId,\n tenantId: data.app.tenantId,\n createdAt: data.app.createdAt,\n updatedAt: data.app.updatedAt,\n }\n : null;\n\n const handleNavigate = (path: string) => {\n navigate?.(`${basePath}${path}`);\n };\n\n const handleCopy = async (text: string) => {\n void nativeImpact(\"light\");\n const ok = await nativeCopyText(text);\n void nativeNotify(ok ? \"success\" : \"error\");\n };\n\n const handleRotateSecret = async () => {\n if (!appId) return;\n try {\n const result = await rotateSecret({ variables: { id: appId } });\n const secret = result.data?.rotateAppSecret?.clientSecret;\n if (secret) {\n setNewSecret(secret);\n setShowSecret(true);\n }\n setConfirmRotate(false);\n refetch();\n } catch {\n // error handled by Apollo\n }\n };\n\n const handleDeactivate = async () => {\n if (!appId) return;\n try {\n await deactivateApp({ variables: { id: appId } });\n setConfirmDelete(false);\n handleNavigate(\"/oauth\");\n } catch {\n // error handled by Apollo\n }\n };\n\n const handleToggleStatus = async () => {\n if (!appId || !app) return;\n const newStatus = app.status === \"ACTIVE\" ? \"INACTIVE\" : \"ACTIVE\";\n try {\n await updateApp({\n variables: { id: appId, input: { status: newStatus } },\n });\n refetch();\n } catch {\n // error handled by Apollo\n }\n };\n\n if (loading && !data) {\n return (\n <PageLayout\n title={tr(\"devportal.appDetails\", \"App Details\")}\n description={tr(\"devportal.loadingDots\", \"Loading...\")}\n backLink=\"/oauth\"\n backLabel={tr(\"devportal.backToApps\", \"Back to Apps\")}\n >\n <div className=\"flex items-center justify-center py-12\">\n <Loader2 className=\"h-8 w-8 animate-spin text-text-secondary\" />\n </div>\n </PageLayout>\n );\n }\n\n if (error || !app) {\n return (\n <PageLayout\n title={tr(\"devportal.appDetails\", \"App Details\")}\n description={tr(\"devportal.failedToLoad\", \"Failed to load\")}\n backLink=\"/oauth\"\n backLabel={tr(\"devportal.backToApps\", \"Back to Apps\")}\n >\n <div className=\"rounded-lg border border-status-error-border/50 bg-status-error-bg/10 p-6 text-center\">\n <AlertCircle className=\"mx-auto h-8 w-8 text-status-error-text\" />\n <h3 className=\"mt-2 font-medium text-status-error-text\">\n {error\n ? tr(\"devportal.failedToLoadApp\", \"Failed to load app\")\n : tr(\"devportal.appNotFound\", \"App not found\")}\n </h3>\n {error && (\n <p className=\"mt-1 text-sm text-text-secondary\">\n {getErrorMessage(error)}\n </p>\n )}\n <button\n onClick={() => handleNavigate(\"/oauth\")}\n className=\"mt-4 inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90\"\n >\n <ArrowLeft size={16} />\n {tr(\"devportal.backToApps\", \"Back to Apps\")}\n </button>\n </div>\n </PageLayout>\n );\n }\n\n return (\n <PermissionGuard authOnly>\n <PageLayout\n title={app.name}\n description={\n app.description ||\n tr(\n \"devportal.oauthAppDetailsAndCredentials\",\n \"OAuth App details and credentials\",\n )\n }\n purpose={tr(\n \"devportal.oauthAppDetailPurpose\",\n \"These are this OAuth app's credentials and the scopes it may request. Copy the client ID for your integration, rotate the secret if it leaks, and keep scopes minimal so users only grant what the app truly needs.\",\n )}\n backLink=\"/oauth\"\n backLabel={tr(\"devportal.backToApps\", \"Back to Apps\")}\n actions={\n <CTAOverflowMenu\n primary={{\n label:\n app.status === \"ACTIVE\"\n ? tr(\"devportal.deactivate\", \"Deactivate\")\n : tr(\"devportal.activate\", \"Activate\"),\n onSelect: handleToggleStatus,\n }}\n actions={[\n {\n label: tr(\"devportal.delete\", \"Delete\"),\n icon: <Trash2 size={16} />,\n intent: \"destructive\",\n onSelect: () => setConfirmDelete(true),\n },\n ]}\n />\n }\n >\n {/* Status & Type */}\n <div className=\"grid gap-6 md:grid-cols-2\">\n <div className=\"rounded-card border border-border-seam bg-bg-surface p-6\">\n <h3 className=\"text-sm font-medium text-text-secondary mb-4\">\n {tr(\"devportal.statusAndConfiguration\", \"Status & Configuration\")}\n </h3>\n <div className=\"space-y-3\">\n <div className=\"flex justify-between\">\n <span className=\"text-sm text-text-secondary\">\n {tr(\"devportal.status\", \"Status\")}\n </span>\n <div className=\"flex items-center gap-2\">\n <ActiveIndicator active={app.status === \"ACTIVE\"} />\n <span className=\"text-sm font-medium\">{app.status}</span>\n </div>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-sm text-text-secondary\">\n {tr(\"devportal.type\", \"Type\")}\n </span>\n <span\n className={cn(\n \"rounded px-2 py-0.5 text-xs font-medium\",\n app.type === \"SERVICE\"\n ? \"bg-accent-purple-subtle text-accent-purple\"\n : app.type === \"INTEGRATION\" ||\n app.type === \"API_INTEGRATION\"\n ? \"bg-status-info-bg-subtle text-status-info-text\"\n : \"bg-status-success-bg-subtle text-status-success-text\",\n )}\n >\n {app.type}\n </span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-sm text-text-secondary\">\n {tr(\"devportal.created\", \"Created\")}\n </span>\n <span className=\"text-sm\">\n {new Date(app.createdAt).toLocaleDateString()}\n </span>\n </div>\n </div>\n </div>\n\n {/* Credentials — primary emphasis zone */}\n <GlassCard treatment=\"glass\" glow className=\"p-6\">\n <h3 className=\"text-sm font-medium text-text-secondary mb-4\">\n {tr(\"devportal.credentials\", \"Credentials\")}\n </h3>\n <div className=\"space-y-3\">\n <div>\n <label className=\"text-xs text-text-secondary\">\n {tr(\"devportal.clientId\", \"Client ID\")}\n </label>\n <div className=\"mt-1 flex items-center gap-2\">\n <code className=\"flex-1 rounded bg-bg-sunken px-3 py-1.5 text-sm font-mono\">\n {app.clientId}\n </code>\n <button\n onClick={() => handleCopy(app.clientId)}\n className=\"rounded p-1.5 hover:bg-bg-sunken transition-colors\"\n title=\"Copy\"\n >\n <Copy size={14} />\n </button>\n </div>\n </div>\n {newSecret && (\n <div>\n <label className=\"text-xs text-status-error-text font-medium\">\n {tr(\n \"devportal.newClientSecretShownOnce\",\n \"New Client Secret (shown only once!)\",\n )}\n </label>\n <div className=\"mt-1 flex items-center gap-2\">\n <code className=\"flex-1 rounded bg-status-error-bg/10 border border-status-error-border/30 px-3 py-1.5 text-sm font-mono\">\n {showSecret\n ? newSecret\n : \"\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022\"}\n </code>\n <button\n onClick={() => setShowSecret(!showSecret)}\n className=\"rounded p-1.5 hover:bg-bg-sunken transition-colors\"\n >\n {showSecret ? <EyeOff size={14} /> : <Eye size={14} />}\n </button>\n <button\n onClick={() => handleCopy(newSecret)}\n className=\"rounded p-1.5 hover:bg-bg-sunken transition-colors\"\n >\n <Copy size={14} />\n </button>\n </div>\n </div>\n )}\n <button\n onClick={() => setConfirmRotate(true)}\n disabled={rotating}\n className=\"mt-2 inline-flex items-center gap-2 rounded-md bg-status-warning-bg-subtle px-3 py-1.5 text-sm font-medium text-status-warning-text hover:bg-status-warning-bg-subtle transition-colors disabled:opacity-50\"\n >\n <RefreshCw\n size={14}\n className={rotating ? \"animate-spin\" : \"\"}\n />\n {tr(\"devportal.rotateSecret\", \"Rotate Secret\")}\n </button>\n </div>\n </GlassCard>\n </div>\n\n {/* Scopes */}\n <div className=\"rounded-card border border-border-seam bg-bg-surface p-6\">\n <h3 className=\"text-sm font-medium text-text-secondary mb-3\">\n {tr(\"devportal.scopes\", \"Scopes\")} ({app.scopes.length})\n </h3>\n {app.scopes.length > 0 ? (\n <div className=\"flex flex-wrap gap-2\">\n {app.scopes.map((scope) => (\n <span\n key={scope}\n className=\"rounded-full bg-action-primary-bg/10 px-3 py-1 text-xs font-medium text-primary\"\n >\n {scope}\n </span>\n ))}\n </div>\n ) : (\n <p className=\"text-sm text-text-secondary\">\n {tr(\"devportal.noScopesConfigured\", \"No scopes configured\")}\n </p>\n )}\n </div>\n\n {/* Redirect URIs */}\n <div className=\"rounded-card border border-border-seam bg-bg-surface p-6\">\n <h3 className=\"text-sm font-medium text-text-secondary mb-3\">\n {tr(\"devportal.redirectUris\", \"Redirect URIs\")} (\n {app.redirectUris.length})\n </h3>\n {app.redirectUris.length > 0 ? (\n <div className=\"space-y-2\">\n {app.redirectUris.map((uri) => (\n <div key={uri} className=\"flex items-center gap-2\">\n <code className=\"rounded bg-bg-sunken px-3 py-1.5 text-sm font-mono\">\n {uri}\n </code>\n <button\n onClick={() => handleCopy(uri)}\n className=\"rounded p-1 hover:bg-bg-sunken transition-colors\"\n >\n <Copy size={12} />\n </button>\n </div>\n ))}\n </div>\n ) : (\n <p className=\"text-sm text-text-secondary\">\n {tr(\n \"devportal.noRedirectUrisConfigured\",\n \"No redirect URIs configured\",\n )}\n </p>\n )}\n </div>\n\n {/* Confirm Rotate Dialog */}\n <AlertDialog open={confirmRotate} onOpenChange={setConfirmRotate}>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>\n {tr(\n \"devportal.rotateClientSecretQuestion\",\n \"Rotate Client Secret?\",\n )}\n </AlertDialogTitle>\n <AlertDialogDescription>\n {tr(\n \"devportal.rotateSecretWarning\",\n \"This will invalidate the current client secret. All integrations using the old secret will stop working immediately.\",\n )}\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel disabled={rotating}>\n {tr(\"devportal.cancel\", \"Cancel\")}\n </AlertDialogCancel>\n <AlertDialogAction\n onClick={(e) => {\n e.preventDefault();\n void handleRotateSecret();\n }}\n disabled={rotating}\n className=\"bg-status-warning-bg text-white hover:bg-status-warning-bg/90\"\n >\n {rotating\n ? tr(\"devportal.rotating\", \"Rotating...\")\n : tr(\"devportal.rotateSecret\", \"Rotate Secret\")}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n\n {/* Confirm Deactivate Dialog */}\n <AlertDialog open={confirmDelete} onOpenChange={setConfirmDelete}>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle className=\"text-status-error-text\">\n {tr(\"devportal.deactivateAppQuestion\", \"Deactivate App?\")}\n </AlertDialogTitle>\n <AlertDialogDescription>\n {tr(\n \"devportal.deactivateAppWarning\",\n \"This will deactivate the app and revoke all tokens. This action cannot be undone easily.\",\n )}\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel disabled={deactivating}>\n {tr(\"devportal.cancel\", \"Cancel\")}\n </AlertDialogCancel>\n <AlertDialogAction\n onClick={(e) => {\n e.preventDefault();\n void handleDeactivate();\n }}\n disabled={deactivating}\n className=\"bg-status-error-bg text-status-error-text hover:bg-status-error-bg/90\"\n >\n {deactivating\n ? tr(\"devportal.deactivating\", \"Deactivating...\")\n : tr(\"devportal.deactivate\", \"Deactivate\")}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </PageLayout>\n </PermissionGuard>\n );\n};\n"],"mappings":"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"}