@kuadrant/kuadrant-backstage-plugin-frontend 0.0.2-dev-1cc1a15 → 0.0.2-dev-e6e0dbf

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 (226) hide show
  1. package/dist/components/ApiAccessCard/ApiAccessCard.esm.js +229 -11
  2. package/dist/components/ApiAccessCard/ApiAccessCard.esm.js.map +1 -1
  3. package/dist/components/ApiKeyManagementTab/ApiKeyManagementTab.esm.js +15 -151
  4. package/dist/components/ApiKeyManagementTab/ApiKeyManagementTab.esm.js.map +1 -1
  5. package/dist/components/ApiProductDetailPage/ApiProductDetailPage.esm.js +10 -15
  6. package/dist/components/ApiProductDetailPage/ApiProductDetailPage.esm.js.map +1 -1
  7. package/dist/components/ApiProductDetails/ApiProductDetails.esm.js +6 -1
  8. package/dist/components/ApiProductDetails/ApiProductDetails.esm.js.map +1 -1
  9. package/dist/components/ApiProductInfoCard/ApiProductInfoCard.esm.js +15 -2
  10. package/dist/components/ApiProductInfoCard/ApiProductInfoCard.esm.js.map +1 -1
  11. package/dist/components/CreateAPIProductDialog/CreateAPIProductDialog.esm.js +2 -4
  12. package/dist/components/CreateAPIProductDialog/CreateAPIProductDialog.esm.js.map +1 -1
  13. package/dist/components/OidcProviderCard/OidcProviderCard.esm.js +23 -0
  14. package/dist/components/OidcProviderCard/OidcProviderCard.esm.js.map +1 -0
  15. package/dist/components/RequestAccessDialog/RequestAccessDialog.esm.js +167 -0
  16. package/dist/components/RequestAccessDialog/RequestAccessDialog.esm.js.map +1 -0
  17. package/dist/index.d.ts +1 -5
  18. package/dist/index.esm.js +1 -2
  19. package/dist/index.esm.js.map +1 -1
  20. package/dist/plugin.esm.js +1 -17
  21. package/dist/plugin.esm.js.map +1 -1
  22. package/dist/utils/validation.esm.js.map +1 -1
  23. package/dist-scalprum/configSchema.json +27 -1
  24. package/dist-scalprum/internal.plugin-kuadrant.1ec7b1dc71663b4b9a17.js +2 -0
  25. package/dist-scalprum/internal.plugin-kuadrant.1ec7b1dc71663b4b9a17.js.map +1 -0
  26. package/dist-scalprum/plugin-manifest.json +2 -2
  27. package/dist-scalprum/static/1085.d17e689a.chunk.js +3 -0
  28. package/dist-scalprum/static/{1085.536aa0fa.chunk.js.map → 1085.d17e689a.chunk.js.map} +1 -1
  29. package/dist-scalprum/static/1645.db086648.chunk.js +3 -0
  30. package/dist-scalprum/static/1645.db086648.chunk.js.map +1 -0
  31. package/dist-scalprum/static/2233.bf0c10d7.chunk.js +3 -0
  32. package/dist-scalprum/static/2233.bf0c10d7.chunk.js.map +1 -0
  33. package/dist-scalprum/static/2628.20156dc1.chunk.js +3 -0
  34. package/dist-scalprum/static/2628.20156dc1.chunk.js.map +1 -0
  35. package/dist-scalprum/static/2822.27a4ac5b.chunk.js +2 -0
  36. package/dist-scalprum/static/2822.27a4ac5b.chunk.js.map +1 -0
  37. package/dist-scalprum/static/2946.a35243f1.chunk.js +3 -0
  38. package/dist-scalprum/static/{2946.167c50c2.chunk.js.map → 2946.a35243f1.chunk.js.map} +1 -1
  39. package/dist-scalprum/static/2952.b3c7e41c.chunk.js +2 -0
  40. package/dist-scalprum/static/2952.b3c7e41c.chunk.js.map +1 -0
  41. package/dist-scalprum/static/2967.6a1db3ad.chunk.js +2 -0
  42. package/dist-scalprum/static/2967.6a1db3ad.chunk.js.map +1 -0
  43. package/dist-scalprum/static/3091.9a74ea5f.chunk.js +2 -0
  44. package/dist-scalprum/static/3091.9a74ea5f.chunk.js.map +1 -0
  45. package/dist-scalprum/static/327.a9a99299.chunk.js +2 -0
  46. package/dist-scalprum/static/327.a9a99299.chunk.js.map +1 -0
  47. package/dist-scalprum/static/3459.a7c29521.chunk.js +2 -0
  48. package/dist-scalprum/static/3459.a7c29521.chunk.js.map +1 -0
  49. package/dist-scalprum/static/3504.1c2f2e54.chunk.js +3 -0
  50. package/dist-scalprum/static/3504.1c2f2e54.chunk.js.map +1 -0
  51. package/dist-scalprum/static/3650.4f0dc550.chunk.js +2 -0
  52. package/dist-scalprum/static/3650.4f0dc550.chunk.js.map +1 -0
  53. package/dist-scalprum/static/3657.882640ca.chunk.js +3 -0
  54. package/dist-scalprum/static/3657.882640ca.chunk.js.LICENSE.txt +8 -0
  55. package/dist-scalprum/static/3657.882640ca.chunk.js.map +1 -0
  56. package/dist-scalprum/static/3947.7458971d.chunk.js +2 -0
  57. package/dist-scalprum/static/3947.7458971d.chunk.js.map +1 -0
  58. package/dist-scalprum/static/3954.12dd8006.chunk.js +3 -0
  59. package/dist-scalprum/static/3954.12dd8006.chunk.js.LICENSE.txt +9 -0
  60. package/dist-scalprum/static/3954.12dd8006.chunk.js.map +1 -0
  61. package/dist-scalprum/static/3984.647ef00c.chunk.js +2 -0
  62. package/dist-scalprum/static/3984.647ef00c.chunk.js.map +1 -0
  63. package/dist-scalprum/static/4026.d652a7a1.chunk.js +2 -0
  64. package/dist-scalprum/static/4026.d652a7a1.chunk.js.map +1 -0
  65. package/dist-scalprum/static/4093.4093.3597955d.css +5 -0
  66. package/dist-scalprum/static/4093.4093.3597955d.css.map +1 -0
  67. package/dist-scalprum/static/4093.ee6f0452.chunk.js +3 -0
  68. package/dist-scalprum/static/4093.ee6f0452.chunk.js.LICENSE.txt +26 -0
  69. package/dist-scalprum/static/4093.ee6f0452.chunk.js.map +1 -0
  70. package/dist-scalprum/static/4382.a7363415.chunk.js +3 -0
  71. package/dist-scalprum/static/4382.a7363415.chunk.js.map +1 -0
  72. package/dist-scalprum/static/441.f708f1e0.chunk.js +2 -0
  73. package/dist-scalprum/static/441.f708f1e0.chunk.js.map +1 -0
  74. package/dist-scalprum/static/4611.0d064cdf.chunk.js +2 -0
  75. package/dist-scalprum/static/4611.0d064cdf.chunk.js.map +1 -0
  76. package/dist-scalprum/static/4614.23f2a85b.chunk.js +2 -0
  77. package/dist-scalprum/static/4614.23f2a85b.chunk.js.map +1 -0
  78. package/dist-scalprum/static/4651.c85cecc4.chunk.js +2 -0
  79. package/dist-scalprum/static/4651.c85cecc4.chunk.js.map +1 -0
  80. package/dist-scalprum/static/{4682.6959fcd1.chunk.js → 4682.bd2dfccd.chunk.js} +2 -2
  81. package/dist-scalprum/static/4682.bd2dfccd.chunk.js.map +1 -0
  82. package/dist-scalprum/static/4935.e14465ff.chunk.js +3 -0
  83. package/dist-scalprum/static/4935.e14465ff.chunk.js.LICENSE.txt +9 -0
  84. package/dist-scalprum/static/4935.e14465ff.chunk.js.map +1 -0
  85. package/dist-scalprum/static/501.87de76da.chunk.js +3 -0
  86. package/dist-scalprum/static/501.87de76da.chunk.js.LICENSE.txt +21 -0
  87. package/dist-scalprum/static/501.87de76da.chunk.js.map +1 -0
  88. package/dist-scalprum/static/5010.0cd6c959.chunk.js +3 -0
  89. package/dist-scalprum/static/5010.0cd6c959.chunk.js.map +1 -0
  90. package/dist-scalprum/static/5203.539ed3ec.chunk.js +2 -0
  91. package/dist-scalprum/static/5203.539ed3ec.chunk.js.map +1 -0
  92. package/dist-scalprum/static/5235.2a59dc45.chunk.js +2 -0
  93. package/dist-scalprum/static/5235.2a59dc45.chunk.js.map +1 -0
  94. package/dist-scalprum/static/5453.ecdee66d.chunk.js +2 -0
  95. package/dist-scalprum/static/5453.ecdee66d.chunk.js.map +1 -0
  96. package/dist-scalprum/static/6038.63d1f832.chunk.js +3 -0
  97. package/dist-scalprum/static/6038.63d1f832.chunk.js.LICENSE.txt +8 -0
  98. package/dist-scalprum/static/6038.63d1f832.chunk.js.map +1 -0
  99. package/dist-scalprum/static/635.e030b18a.chunk.js +3 -0
  100. package/dist-scalprum/static/635.e030b18a.chunk.js.LICENSE.txt +9 -0
  101. package/dist-scalprum/static/635.e030b18a.chunk.js.map +1 -0
  102. package/dist-scalprum/static/{6371.c83dc422.chunk.js → 6371.d45f37cc.chunk.js} +2 -2
  103. package/dist-scalprum/static/6371.d45f37cc.chunk.js.map +1 -0
  104. package/dist-scalprum/static/{8563.7e068fb0.chunk.js → 6763.d6cd937f.chunk.js} +3 -3
  105. package/dist-scalprum/static/6763.d6cd937f.chunk.js.map +1 -0
  106. package/dist-scalprum/static/{6800.736d5da3.chunk.js → 6800.6e2a08fe.chunk.js} +2 -2
  107. package/dist-scalprum/static/6800.6e2a08fe.chunk.js.map +1 -0
  108. package/dist-scalprum/static/{6840.4728fab9.chunk.js → 6840.3bd67cf4.chunk.js} +2 -2
  109. package/dist-scalprum/static/6840.3bd67cf4.chunk.js.map +1 -0
  110. package/dist-scalprum/static/7076.8745d395.chunk.js +2 -0
  111. package/dist-scalprum/static/7076.8745d395.chunk.js.map +1 -0
  112. package/dist-scalprum/static/7164.5dc4bc72.chunk.js +2 -0
  113. package/dist-scalprum/static/7164.5dc4bc72.chunk.js.map +1 -0
  114. package/dist-scalprum/static/7367.62c9669e.chunk.js +3 -0
  115. package/dist-scalprum/static/7367.62c9669e.chunk.js.LICENSE.txt +21 -0
  116. package/dist-scalprum/static/7367.62c9669e.chunk.js.map +1 -0
  117. package/dist-scalprum/static/7791.8135d440.chunk.js +2 -0
  118. package/dist-scalprum/static/7791.8135d440.chunk.js.map +1 -0
  119. package/dist-scalprum/static/8083.4763f88b.chunk.js +206 -0
  120. package/dist-scalprum/static/8083.4763f88b.chunk.js.LICENSE.txt +9 -0
  121. package/dist-scalprum/static/8083.4763f88b.chunk.js.map +1 -0
  122. package/dist-scalprum/static/8172.cbe1f2c4.chunk.js +2 -0
  123. package/dist-scalprum/static/8172.cbe1f2c4.chunk.js.map +1 -0
  124. package/dist-scalprum/static/8799.83d049f3.chunk.js +2 -0
  125. package/dist-scalprum/static/8799.83d049f3.chunk.js.map +1 -0
  126. package/dist-scalprum/static/9316.d9f2fe18.chunk.js +2 -0
  127. package/dist-scalprum/static/9316.d9f2fe18.chunk.js.map +1 -0
  128. package/dist-scalprum/static/{7556.aa8a002f.chunk.js → 9655.db0c82b2.chunk.js} +3 -3
  129. package/dist-scalprum/static/9655.db0c82b2.chunk.js.map +1 -0
  130. package/dist-scalprum/static/9710.7ec34777.chunk.js +2 -0
  131. package/dist-scalprum/static/9710.7ec34777.chunk.js.map +1 -0
  132. package/dist-scalprum/static/9738.b037daf3.chunk.js +2 -0
  133. package/dist-scalprum/static/9738.b037daf3.chunk.js.map +1 -0
  134. package/dist-scalprum/static/exposed-PluginRoot.c3fd0cc1.chunk.js +2 -0
  135. package/dist-scalprum/static/exposed-PluginRoot.c3fd0cc1.chunk.js.map +1 -0
  136. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_http.a55e168b.chunk.js +2 -0
  137. package/dist-scalprum/static/{react-syntax-highlighter_languages_highlight_http.5859273c.chunk.js.map → react-syntax-highlighter_languages_highlight_http.a55e168b.chunk.js.map} +1 -1
  138. package/package.json +12 -11
  139. package/dist/components/ApprovalQueueCard/ApprovalQueueCard.esm.js +0 -761
  140. package/dist/components/ApprovalQueueCard/ApprovalQueueCard.esm.js.map +0 -1
  141. package/dist/components/ApprovalQueueCard/index.esm.js +0 -2
  142. package/dist/components/ApprovalQueueCard/index.esm.js.map +0 -1
  143. package/dist/components/PlanPolicyDetailPage/PlanPolicyDetailPage.esm.js +0 -89
  144. package/dist/components/PlanPolicyDetailPage/PlanPolicyDetailPage.esm.js.map +0 -1
  145. package/dist/components/PlanPolicyDetailPage/index.esm.js +0 -2
  146. package/dist/components/PlanPolicyDetailPage/index.esm.js.map +0 -1
  147. package/dist-scalprum/internal.plugin-kuadrant.58a9d553e354df0eed24.js +0 -2
  148. package/dist-scalprum/internal.plugin-kuadrant.58a9d553e354df0eed24.js.map +0 -1
  149. package/dist-scalprum/static/1085.536aa0fa.chunk.js +0 -3
  150. package/dist-scalprum/static/1613.71f0fccd.chunk.js +0 -3
  151. package/dist-scalprum/static/1613.71f0fccd.chunk.js.LICENSE.txt +0 -10
  152. package/dist-scalprum/static/1613.71f0fccd.chunk.js.map +0 -1
  153. package/dist-scalprum/static/1836.b74b4c40.chunk.js +0 -3
  154. package/dist-scalprum/static/1836.b74b4c40.chunk.js.LICENSE.txt +0 -10
  155. package/dist-scalprum/static/1836.b74b4c40.chunk.js.map +0 -1
  156. package/dist-scalprum/static/2198.5905970e.chunk.js +0 -2
  157. package/dist-scalprum/static/2198.5905970e.chunk.js.map +0 -1
  158. package/dist-scalprum/static/2628.6619bf8b.chunk.js +0 -3
  159. package/dist-scalprum/static/2628.6619bf8b.chunk.js.map +0 -1
  160. package/dist-scalprum/static/2759.fceb317f.chunk.js +0 -2
  161. package/dist-scalprum/static/2759.fceb317f.chunk.js.map +0 -1
  162. package/dist-scalprum/static/2928.4303c12e.chunk.js +0 -3
  163. package/dist-scalprum/static/2928.4303c12e.chunk.js.map +0 -1
  164. package/dist-scalprum/static/2946.167c50c2.chunk.js +0 -3
  165. package/dist-scalprum/static/2967.ac3a4bee.chunk.js +0 -2
  166. package/dist-scalprum/static/2967.ac3a4bee.chunk.js.map +0 -1
  167. package/dist-scalprum/static/2987.1da15560.chunk.js +0 -2
  168. package/dist-scalprum/static/2987.1da15560.chunk.js.map +0 -1
  169. package/dist-scalprum/static/3097.4bd6b35f.chunk.js +0 -2
  170. package/dist-scalprum/static/3097.4bd6b35f.chunk.js.map +0 -1
  171. package/dist-scalprum/static/3459.5c90b5a3.chunk.js +0 -2
  172. package/dist-scalprum/static/3459.5c90b5a3.chunk.js.map +0 -1
  173. package/dist-scalprum/static/3466.43dfe991.chunk.js +0 -3
  174. package/dist-scalprum/static/3466.43dfe991.chunk.js.map +0 -1
  175. package/dist-scalprum/static/3503.66b6e510.chunk.js +0 -2
  176. package/dist-scalprum/static/3503.66b6e510.chunk.js.map +0 -1
  177. package/dist-scalprum/static/3647.b96f9b3e.chunk.js +0 -2
  178. package/dist-scalprum/static/3647.b96f9b3e.chunk.js.map +0 -1
  179. package/dist-scalprum/static/3650.515c743a.chunk.js +0 -2
  180. package/dist-scalprum/static/3650.515c743a.chunk.js.map +0 -1
  181. package/dist-scalprum/static/3657.59d45756.chunk.js +0 -3
  182. package/dist-scalprum/static/3657.59d45756.chunk.js.LICENSE.txt +0 -10
  183. package/dist-scalprum/static/3657.59d45756.chunk.js.map +0 -1
  184. package/dist-scalprum/static/428.0a290bc6.chunk.js +0 -2
  185. package/dist-scalprum/static/428.0a290bc6.chunk.js.map +0 -1
  186. package/dist-scalprum/static/441.9f02e61b.chunk.js +0 -2
  187. package/dist-scalprum/static/441.9f02e61b.chunk.js.map +0 -1
  188. package/dist-scalprum/static/4682.6959fcd1.chunk.js.map +0 -1
  189. package/dist-scalprum/static/5010.a4aa0f8e.chunk.js +0 -3
  190. package/dist-scalprum/static/5010.a4aa0f8e.chunk.js.map +0 -1
  191. package/dist-scalprum/static/5453.280127dd.chunk.js +0 -2
  192. package/dist-scalprum/static/5453.280127dd.chunk.js.map +0 -1
  193. package/dist-scalprum/static/5603.05d9ca7f.chunk.js +0 -2
  194. package/dist-scalprum/static/5603.05d9ca7f.chunk.js.map +0 -1
  195. package/dist-scalprum/static/6272.b5ee5195.chunk.js +0 -3
  196. package/dist-scalprum/static/6272.b5ee5195.chunk.js.map +0 -1
  197. package/dist-scalprum/static/6371.c83dc422.chunk.js.map +0 -1
  198. package/dist-scalprum/static/6422.97baf774.chunk.js +0 -2
  199. package/dist-scalprum/static/6422.97baf774.chunk.js.map +0 -1
  200. package/dist-scalprum/static/6800.736d5da3.chunk.js.map +0 -1
  201. package/dist-scalprum/static/6840.4728fab9.chunk.js.map +0 -1
  202. package/dist-scalprum/static/7556.aa8a002f.chunk.js.map +0 -1
  203. package/dist-scalprum/static/7601.4df83556.chunk.js +0 -3
  204. package/dist-scalprum/static/7601.4df83556.chunk.js.map +0 -1
  205. package/dist-scalprum/static/7791.39417f8c.chunk.js +0 -2
  206. package/dist-scalprum/static/7791.39417f8c.chunk.js.map +0 -1
  207. package/dist-scalprum/static/7984.c8511b89.chunk.js +0 -2
  208. package/dist-scalprum/static/7984.c8511b89.chunk.js.map +0 -1
  209. package/dist-scalprum/static/8365.d3360f18.chunk.js +0 -2
  210. package/dist-scalprum/static/8365.d3360f18.chunk.js.map +0 -1
  211. package/dist-scalprum/static/8563.7e068fb0.chunk.js.map +0 -1
  212. package/dist-scalprum/static/8799.7c749838.chunk.js +0 -2
  213. package/dist-scalprum/static/8799.7c749838.chunk.js.map +0 -1
  214. package/dist-scalprum/static/exposed-PluginRoot.a5792fb2.chunk.js +0 -2
  215. package/dist-scalprum/static/exposed-PluginRoot.a5792fb2.chunk.js.map +0 -1
  216. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_http.5859273c.chunk.js +0 -2
  217. /package/dist-scalprum/static/{1085.536aa0fa.chunk.js.LICENSE.txt → 1085.d17e689a.chunk.js.LICENSE.txt} +0 -0
  218. /package/dist-scalprum/static/{3466.43dfe991.chunk.js.LICENSE.txt → 1645.db086648.chunk.js.LICENSE.txt} +0 -0
  219. /package/dist-scalprum/static/{6272.b5ee5195.chunk.js.LICENSE.txt → 2233.bf0c10d7.chunk.js.LICENSE.txt} +0 -0
  220. /package/dist-scalprum/static/{2628.6619bf8b.chunk.js.LICENSE.txt → 2628.20156dc1.chunk.js.LICENSE.txt} +0 -0
  221. /package/dist-scalprum/static/{2946.167c50c2.chunk.js.LICENSE.txt → 2946.a35243f1.chunk.js.LICENSE.txt} +0 -0
  222. /package/dist-scalprum/static/{7601.4df83556.chunk.js.LICENSE.txt → 3504.1c2f2e54.chunk.js.LICENSE.txt} +0 -0
  223. /package/dist-scalprum/static/{2928.4303c12e.chunk.js.LICENSE.txt → 4382.a7363415.chunk.js.LICENSE.txt} +0 -0
  224. /package/dist-scalprum/static/{5010.a4aa0f8e.chunk.js.LICENSE.txt → 5010.0cd6c959.chunk.js.LICENSE.txt} +0 -0
  225. /package/dist-scalprum/static/{8563.7e068fb0.chunk.js.LICENSE.txt → 6763.d6cd937f.chunk.js.LICENSE.txt} +0 -0
  226. /package/dist-scalprum/static/{7556.aa8a002f.chunk.js.LICENSE.txt → 9655.db0c82b2.chunk.js.LICENSE.txt} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static/3504.1c2f2e54.chunk.js","mappings":"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","sources":["webpack://internal.plugin-kuadrant/./node_modules/@backstage/core-plugin-api/dist/analytics/AnalyticsContext.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/core-plugin-api/dist/apis/definitions/AnalyticsApi.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/core-plugin-api/dist/analytics/Tracker.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/core-plugin-api/dist/analytics/useAnalytics.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/core-plugin-api/dist/app/useApp.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/core-plugin-api/dist/extensions/componentData.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/core-plugin-api/dist/routing/useRouteRef.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/core-plugin-api/dist/extensions/PluginErrorBoundary.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/core-plugin-api/dist/extensions/extensions.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/core-plugin-api/dist/extensions/useElementFilter.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/core-plugin-api/dist/plugin/Plugin.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/core-plugin-api/dist/routing/types.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/core-plugin-api/dist/routing/RouteRef.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/core-plugin-api/dist/routing/SubRouteRef.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/core-plugin-api/dist/routing/ExternalRouteRef.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/core-plugin-api/dist/routing/useRouteRefParams.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/react/jsx-runtime.js","webpack://internal.plugin-kuadrant/../../node_modules/@backstage/errors/dist/errors/assertion.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@backstage/errors/dist/errors/CustomErrorBase.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@backstage/errors/dist/serialization/error.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@backstage/errors/dist/errors/common.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/react/cjs/react-jsx-runtime.production.min.js"],"sourcesContent":["import { jsx } from 'react/jsx-runtime';\nimport { createVersionedContext, createVersionedValueMap } from '@backstage/version-bridge';\nimport { useContext } from 'react';\n\nconst AnalyticsReactContext = createVersionedContext(\"analytics-context\");\nconst useAnalyticsContext = () => {\n const theContext = useContext(AnalyticsReactContext);\n if (theContext === void 0) {\n return {\n routeRef: \"unknown\",\n pluginId: \"root\",\n extension: \"App\"\n };\n }\n const theValue = theContext.atVersion(1);\n if (theValue === void 0) {\n throw new Error(\"No context found for version 1.\");\n }\n return theValue;\n};\nconst AnalyticsContext = (options) => {\n const { attributes, children } = options;\n const parentValues = useAnalyticsContext();\n const combinedValue = {\n ...parentValues,\n ...attributes\n };\n const versionedCombinedValue = createVersionedValueMap({ 1: combinedValue });\n return /* @__PURE__ */ jsx(AnalyticsReactContext.Provider, { value: versionedCombinedValue, children });\n};\n\nexport { AnalyticsContext, useAnalyticsContext };\n//# sourceMappingURL=AnalyticsContext.esm.js.map\n","import { createApiRef } from '@backstage/frontend-plugin-api';\n\nconst analyticsApiRef = createApiRef({\n id: \"core.analytics\"\n});\n\nexport { analyticsApiRef };\n//# sourceMappingURL=AnalyticsApi.esm.js.map\n","import { getOrCreateGlobalSingleton } from '@backstage/version-bridge';\n\nconst globalEvents = getOrCreateGlobalSingleton(\n \"core-plugin-api:analytics-tracker-events\",\n () => ({\n mostRecentGatheredNavigation: void 0,\n mostRecentRoutableExtensionRender: void 0,\n beforeUnloadRegistered: false\n })\n);\nconst routableExtensionRenderedEvent = \"_ROUTABLE-EXTENSION-RENDERED\";\nclass Tracker {\n analyticsApi;\n context;\n constructor(analyticsApi, context = {\n routeRef: \"unknown\",\n pluginId: \"root\",\n extension: \"App\"\n }) {\n this.analyticsApi = analyticsApi;\n this.context = context;\n if (!globalEvents.beforeUnloadRegistered) {\n addEventListener(\n \"beforeunload\",\n () => {\n if (globalEvents.mostRecentGatheredNavigation) {\n this.analyticsApi.captureEvent({\n ...globalEvents.mostRecentGatheredNavigation,\n ...globalEvents.mostRecentRoutableExtensionRender\n });\n globalEvents.mostRecentGatheredNavigation = void 0;\n globalEvents.mostRecentRoutableExtensionRender = void 0;\n }\n },\n { once: true, passive: true }\n );\n globalEvents.beforeUnloadRegistered = true;\n }\n }\n setContext(context) {\n this.context = context;\n }\n captureEvent(action, subject, {\n value,\n attributes\n } = {}) {\n const { _routeNodeType, ...context } = this.context;\n if (action === routableExtensionRenderedEvent) {\n if (globalEvents.mostRecentGatheredNavigation) {\n globalEvents.mostRecentRoutableExtensionRender = {\n context: {\n ...context,\n extension: \"App\"\n }\n };\n }\n return;\n }\n if (globalEvents.mostRecentGatheredNavigation) {\n try {\n this.analyticsApi.captureEvent({\n ...globalEvents.mostRecentGatheredNavigation,\n ...globalEvents.mostRecentRoutableExtensionRender\n });\n } catch (e) {\n console.warn(\"Error during analytics event capture. %o\", e);\n }\n globalEvents.mostRecentGatheredNavigation = void 0;\n globalEvents.mostRecentRoutableExtensionRender = void 0;\n }\n if (action === \"navigate\" && _routeNodeType === \"gathered\" && context.pluginId === \"root\") {\n globalEvents.mostRecentGatheredNavigation = {\n action,\n subject,\n value,\n attributes,\n context\n };\n return;\n }\n try {\n this.analyticsApi.captureEvent({\n action,\n subject,\n value,\n attributes,\n context\n });\n } catch (e) {\n console.warn(\"Error during analytics event capture. %o\", e);\n }\n }\n}\n\nexport { Tracker, routableExtensionRenderedEvent };\n//# sourceMappingURL=Tracker.esm.js.map\n","import { useAnalyticsContext } from './AnalyticsContext.esm.js';\nimport { useApi } from '@backstage/frontend-plugin-api';\nimport { analyticsApiRef } from '../apis/definitions/AnalyticsApi.esm.js';\nimport { useRef } from 'react';\nimport { Tracker } from './Tracker.esm.js';\n\nfunction useAnalyticsApi() {\n try {\n return useApi(analyticsApiRef);\n } catch {\n return { captureEvent: () => {\n } };\n }\n}\nfunction useAnalytics() {\n const trackerRef = useRef(null);\n const context = useAnalyticsContext();\n const analyticsApi = useAnalyticsApi();\n function getTracker() {\n if (trackerRef.current === null) {\n trackerRef.current = new Tracker(analyticsApi);\n }\n return trackerRef.current;\n }\n const tracker = getTracker();\n tracker.setContext(context);\n return tracker;\n}\n\nexport { useAnalytics };\n//# sourceMappingURL=useAnalytics.esm.js.map\n","import { jsx } from 'react/jsx-runtime';\nimport { useMemo } from 'react';\nimport { getOrCreateGlobalSingleton, useVersionedContext } from '@backstage/version-bridge';\nimport { appTreeApiRef, iconsApiRef, Progress, NotFoundErrorPage, useApiHolder, ErrorDisplay, createFrontendPlugin } from '@backstage/frontend-plugin-api';\n\nconst legacyPluginStore = getOrCreateGlobalSingleton(\n \"legacy-plugin-compatibility-store\",\n () => /* @__PURE__ */ new WeakMap()\n);\nfunction toLegacyPlugin(plugin) {\n let legacy = legacyPluginStore.get(plugin);\n if (legacy) {\n return legacy;\n }\n const errorMsg = \"Not implemented in legacy plugin compatibility layer\";\n const notImplemented = () => {\n throw new Error(errorMsg);\n };\n legacy = {\n getId() {\n return plugin.id;\n },\n get routes() {\n return {};\n },\n get externalRoutes() {\n return {};\n },\n getApis: notImplemented,\n getFeatureFlags: notImplemented,\n provide: notImplemented\n };\n legacyPluginStore.set(plugin, legacy);\n return legacy;\n}\nfunction toNewPlugin(plugin) {\n return createFrontendPlugin({\n pluginId: plugin.getId()\n });\n}\nfunction useOptionalApiHolder() {\n try {\n return useApiHolder();\n } catch {\n return void 0;\n }\n}\nconst useApp = () => {\n const apiHolder = useOptionalApiHolder();\n const appTreeApi = apiHolder?.get(appTreeApiRef);\n const iconsApi = apiHolder?.get(iconsApiRef);\n const versionedContext = useVersionedContext(\n \"app-context\"\n );\n const newAppContext = useMemo(() => {\n if (!appTreeApi) {\n return void 0;\n }\n if (!iconsApi) {\n return void 0;\n }\n const { tree } = appTreeApi.getTree();\n let gatheredPlugins = void 0;\n const ErrorBoundaryFallbackWrapper = ({ plugin, ...rest }) => /* @__PURE__ */ jsx(ErrorDisplay, { ...rest, plugin: plugin && toNewPlugin(plugin) });\n return {\n getPlugins() {\n if (gatheredPlugins) {\n return gatheredPlugins;\n }\n const pluginSet = /* @__PURE__ */ new Set();\n for (const node of tree.nodes.values()) {\n const plugin = node.spec.plugin;\n if (plugin) {\n pluginSet.add(toLegacyPlugin(plugin));\n }\n }\n gatheredPlugins = Array.from(pluginSet);\n return gatheredPlugins;\n },\n getSystemIcon(key) {\n return iconsApi.getIcon(key);\n },\n getSystemIcons() {\n return Object.fromEntries(\n iconsApi.listIconKeys().map((key) => [key, iconsApi.getIcon(key)])\n );\n },\n getComponents() {\n return {\n NotFoundErrorPage,\n BootErrorPage() {\n throw new Error(\n \"The BootErrorPage app component should not be accessed by plugins\"\n );\n },\n Progress,\n Router() {\n throw new Error(\n \"The Router app component should not be accessed by plugins\"\n );\n },\n ErrorBoundaryFallback: ErrorBoundaryFallbackWrapper\n };\n }\n };\n }, [appTreeApi, iconsApi]);\n if (newAppContext) {\n return newAppContext;\n }\n if (!versionedContext) {\n throw new Error(\"App context is not available\");\n }\n const appContext = versionedContext.atVersion(1);\n if (!appContext) {\n throw new Error(\"AppContext v1 not available\");\n }\n return appContext;\n};\n\nexport { useApp };\n//# sourceMappingURL=useApp.esm.js.map\n","import { getOrCreateGlobalSingleton } from '@backstage/version-bridge';\n\nconst globalStore = getOrCreateGlobalSingleton(\n \"component-data-store\",\n () => /* @__PURE__ */ new WeakMap()\n);\nconst componentDataKey = \"__backstage_data\";\nfunction attachComponentData(component, type, data) {\n const dataComponent = component;\n let container = dataComponent[componentDataKey] ?? globalStore.get(component);\n if (!container) {\n container = { map: /* @__PURE__ */ new Map() };\n Object.defineProperty(dataComponent, componentDataKey, {\n enumerable: false,\n configurable: true,\n writable: false,\n value: container\n });\n globalStore.set(component, container);\n }\n if (container.map.has(type)) {\n const name = component.displayName || component.name;\n throw new Error(\n `Attempted to attach duplicate data \"${type}\" to component \"${name}\"`\n );\n }\n container.map.set(type, data);\n}\nfunction getComponentData(node, type) {\n if (!node) {\n return void 0;\n }\n const component = node.type;\n if (!component) {\n return void 0;\n }\n const container = component[componentDataKey] ?? globalStore.get(component);\n if (!container) {\n return void 0;\n }\n return container.map.get(type);\n}\n\nexport { attachComponentData, getComponentData };\n//# sourceMappingURL=componentData.esm.js.map\n","import { useMemo } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport { useVersionedContext } from '@backstage/version-bridge';\nimport { useApi, routeResolutionApiRef } from '@backstage/frontend-plugin-api';\n\nfunction useRouteResolutionApi() {\n try {\n return useApi(routeResolutionApiRef);\n } catch {\n return void 0;\n }\n}\nfunction useRouteRef(routeRef) {\n const { pathname } = useLocation();\n const routeResolutionApi = useRouteResolutionApi();\n const versionedContext = useVersionedContext(\n \"routing-context\"\n );\n const resolver = versionedContext?.atVersion(1);\n const newRouteFunc = useMemo(() => {\n if (!routeResolutionApi) {\n return null;\n }\n try {\n return routeResolutionApi?.resolve(routeRef, {\n sourcePath: pathname\n });\n } catch {\n return null;\n }\n }, [routeResolutionApi, routeRef, pathname]);\n const legacyRouteFunc = useMemo(\n () => resolver && resolver.resolve(routeRef, { pathname }),\n [resolver, routeRef, pathname]\n );\n if (newRouteFunc !== null) {\n const isOptional2 = \"optional\" in routeRef && routeRef.optional;\n if (!newRouteFunc && !isOptional2) {\n throw new Error(`No path for ${routeRef}`);\n }\n return newRouteFunc;\n }\n if (!versionedContext) {\n throw new Error(\"Routing context is not available\");\n }\n if (!resolver) {\n throw new Error(\"RoutingContext v1 not available\");\n }\n const isOptional = \"optional\" in routeRef && routeRef.optional;\n if (!legacyRouteFunc && !isOptional) {\n throw new Error(`No path for ${routeRef}`);\n }\n return legacyRouteFunc;\n}\n\nexport { useRouteRef };\n//# sourceMappingURL=useRouteRef.esm.js.map\n","import { jsx } from 'react/jsx-runtime';\nimport { Component } from 'react';\n\nclass PluginErrorBoundary extends Component {\n static getDerivedStateFromError(error) {\n return { error };\n }\n state = { error: void 0 };\n handleErrorReset = () => {\n this.setState({ error: void 0 });\n };\n render() {\n const { error } = this.state;\n const { app, plugin } = this.props;\n const { ErrorBoundaryFallback } = app.getComponents();\n if (error) {\n return /* @__PURE__ */ jsx(\n ErrorBoundaryFallback,\n {\n error,\n resetError: this.handleErrorReset,\n plugin\n }\n );\n }\n return this.props.children;\n }\n}\n\nexport { PluginErrorBoundary };\n//# sourceMappingURL=PluginErrorBoundary.esm.js.map\n","import { jsx } from 'react/jsx-runtime';\nimport { lazy, useEffect, Suspense } from 'react';\nimport { AnalyticsContext } from '../analytics/AnalyticsContext.esm.js';\nimport { useAnalytics } from '../analytics/useAnalytics.esm.js';\nimport { useApp } from '../app/useApp.esm.js';\nimport '../routing/types.esm.js';\nimport { useRouteRef } from '../routing/useRouteRef.esm.js';\nimport 'react-router-dom';\nimport { attachComponentData } from './componentData.esm.js';\nimport { PluginErrorBoundary } from './PluginErrorBoundary.esm.js';\nimport { routableExtensionRenderedEvent } from '../analytics/Tracker.esm.js';\nimport { ForwardedError } from '@backstage/errors';\n\nfunction createRoutableExtension(options) {\n const { component, mountPoint, name } = options;\n return createReactExtension({\n component: {\n lazy: () => component().then((InnerComponent) => {\n const RoutableExtensionWrapper = (props) => {\n const analytics = useAnalytics();\n try {\n useRouteRef(mountPoint);\n } catch (error) {\n if (typeof error === \"object\" && error !== null) {\n const { message } = error;\n if (typeof message === \"string\" && message.startsWith(\"No path for \")) {\n throw new Error(\n `Routable extension component with mount point ${mountPoint} was not discovered in the app element tree. Routable extension components may not be rendered by other components and must be directly available as an element within the App provider component.`\n );\n }\n }\n throw error;\n }\n useEffect(() => {\n analytics.captureEvent(routableExtensionRenderedEvent, \"\");\n }, [analytics]);\n return /* @__PURE__ */ jsx(InnerComponent, { ...props });\n };\n const componentName = name || InnerComponent.displayName || InnerComponent.name || \"LazyComponent\";\n RoutableExtensionWrapper.displayName = `RoutableExtension(${componentName})`;\n return RoutableExtensionWrapper;\n })\n },\n data: {\n \"core.mountPoint\": mountPoint\n },\n name\n });\n}\nfunction createComponentExtension(options) {\n const { component, name } = options;\n return createReactExtension({ component, name });\n}\nfunction createReactExtension(options) {\n const { data = {}, name } = options;\n if (!name) {\n console.warn(\n \"Declaring extensions without name is DEPRECATED. Make sure that all usages of createReactExtension, createComponentExtension and createRoutableExtension provide a name.\"\n );\n }\n let Component;\n if (\"lazy\" in options.component) {\n const lazyLoader = options.component.lazy;\n Component = lazy(\n () => lazyLoader().then(\n (component) => ({ default: component }),\n (error) => {\n const ofExtension = name ? ` of the ${name} extension` : \"\";\n throw new ForwardedError(\n `Failed lazy loading${ofExtension}, try to reload the page`,\n error\n );\n }\n )\n );\n } else {\n Component = options.component.sync;\n }\n const componentName = name || Component.displayName || Component.name || \"Component\";\n return {\n expose(plugin) {\n const Result = (props) => {\n const app = useApp();\n const { Progress } = app.getComponents();\n const mountPoint = data?.[\"core.mountPoint\"];\n return /* @__PURE__ */ jsx(Suspense, { fallback: /* @__PURE__ */ jsx(Progress, {}), children: /* @__PURE__ */ jsx(PluginErrorBoundary, { app, plugin, children: /* @__PURE__ */ jsx(\n AnalyticsContext,\n {\n attributes: {\n pluginId: plugin.getId(),\n ...name && { extension: name },\n ...mountPoint && { routeRef: mountPoint.id }\n },\n children: /* @__PURE__ */ jsx(Component, { ...props })\n }\n ) }) });\n };\n attachComponentData(Result, \"core.plugin\", plugin);\n attachComponentData(Result, \"core.extensionName\", name);\n for (const [key, value] of Object.entries(data)) {\n attachComponentData(Result, key, value);\n }\n Result.displayName = `Extension(${componentName})`;\n return Result;\n }\n };\n}\n\nexport { createComponentExtension, createReactExtension, createRoutableExtension };\n//# sourceMappingURL=extensions.esm.js.map\n","import { useMemo, Children, isValidElement, Fragment } from 'react';\nimport { getComponentData } from './componentData.esm.js';\nimport { useApi, featureFlagsApiRef } from '@backstage/frontend-plugin-api';\nimport '../apis/definitions/AnalyticsApi.esm.js';\n\nfunction selectChildren(rootNode, featureFlagsApi, selector, strictError) {\n return Children.toArray(rootNode).flatMap((node) => {\n if (!isValidElement(node)) {\n return [];\n }\n if (node.type === Fragment) {\n return selectChildren(\n node.props.children,\n featureFlagsApi,\n selector,\n strictError\n );\n }\n if (getComponentData(node, \"core.featureFlagged\")) {\n const props = node.props;\n const isEnabled = \"with\" in props ? featureFlagsApi.isActive(props.with) : !featureFlagsApi.isActive(props.without);\n if (isEnabled) {\n return selectChildren(\n node.props.children,\n featureFlagsApi,\n selector,\n strictError\n );\n }\n return [];\n }\n if (selector === void 0 || selector(node)) {\n return [node];\n }\n if (strictError) {\n throw new Error(strictError);\n }\n return selectChildren(\n node.props.children,\n featureFlagsApi,\n selector,\n strictError\n );\n });\n}\nclass Collection {\n node;\n featureFlagsApi;\n constructor(node, featureFlagsApi) {\n this.node = node;\n this.featureFlagsApi = featureFlagsApi;\n }\n selectByComponentData(query) {\n const selection = selectChildren(\n this.node,\n this.featureFlagsApi,\n (node) => getComponentData(node, query.key) !== void 0,\n query.withStrictError\n );\n return new Collection(selection, this.featureFlagsApi);\n }\n findComponentData(query) {\n const selection = selectChildren(\n this.node,\n this.featureFlagsApi,\n (node) => getComponentData(node, query.key) !== void 0\n );\n return selection.map((node) => getComponentData(node, query.key)).filter((data) => data !== void 0);\n }\n getElements() {\n return selectChildren(this.node, this.featureFlagsApi);\n }\n}\nfunction useElementFilter(node, filterFn, dependencies = []) {\n const featureFlagsApi = useApi(featureFlagsApiRef);\n const elements = new Collection(node, featureFlagsApi);\n return useMemo(() => filterFn(elements), [node, ...dependencies]);\n}\n\nexport { useElementFilter };\n//# sourceMappingURL=useElementFilter.esm.js.map\n","class PluginImpl {\n constructor(config) {\n this.config = config;\n }\n getId() {\n return this.config.id;\n }\n getApis() {\n return this.config.apis ?? [];\n }\n getFeatureFlags() {\n return this.config.featureFlags?.slice() ?? [];\n }\n get routes() {\n return this.config.routes ?? {};\n }\n get externalRoutes() {\n return this.config.externalRoutes ?? {};\n }\n provide(extension) {\n return extension.expose(this);\n }\n toString() {\n return `plugin{${this.config.id}}`;\n }\n}\nfunction createPlugin(config) {\n return new PluginImpl(config);\n}\n\nexport { PluginImpl, createPlugin };\n//# sourceMappingURL=Plugin.esm.js.map\n","import { getOrCreateGlobalSingleton } from '@backstage/version-bridge';\n\nconst routeRefType = getOrCreateGlobalSingleton(\n \"route-ref-type\",\n () => /* @__PURE__ */ Symbol(\"route-ref-type\")\n);\n\nexport { routeRefType };\n//# sourceMappingURL=types.esm.js.map\n","import { routeRefType } from './types.esm.js';\n\nclass RouteRefImpl {\n [routeRefType] = \"absolute\";\n id;\n params;\n constructor(id, params) {\n this.id = id;\n this.params = params;\n }\n get title() {\n return this.id;\n }\n toString() {\n if (this.#nfsId) {\n return `routeRef{id=${this.#nfsId},legacyId=${this.id}}`;\n }\n return `routeRef{type=absolute,id=${this.id}}`;\n }\n // NFS implementation below\n $$type = \"@backstage/RouteRef\";\n version = \"v1\";\n T = void 0;\n alias = void 0;\n #nfsId = void 0;\n getParams() {\n return this.params;\n }\n getDescription() {\n if (this.#nfsId) {\n return this.#nfsId;\n }\n return this.id;\n }\n setId(newId) {\n if (!newId) {\n throw new Error(`RouteRef id must be a non-empty string`);\n }\n if (this.#nfsId && this.#nfsId !== newId) {\n throw new Error(\n `RouteRef was referenced twice as both '${this.#nfsId}' and '${newId}'`\n );\n }\n this.#nfsId = newId;\n }\n}\nfunction createRouteRef(config) {\n return new RouteRefImpl(\n config.id,\n config.params ?? []\n );\n}\n\nexport { RouteRefImpl, createRouteRef };\n//# sourceMappingURL=RouteRef.esm.js.map\n","import { routeRefType } from './types.esm.js';\n\nconst PARAM_PATTERN = /^\\w+$/;\nclass SubRouteRefImpl {\n [routeRefType] = \"sub\";\n id;\n path;\n parent;\n params;\n constructor(id, path, parent, params) {\n this.id = id;\n this.path = path;\n this.parent = parent;\n this.params = params;\n }\n toString() {\n return `routeRef{type=sub,id=${this.id}}`;\n }\n // NFS implementation below\n $$type = \"@backstage/SubRouteRef\";\n version = \"v1\";\n T = void 0;\n getParams() {\n return this.params;\n }\n getParent() {\n return this.parent;\n }\n getDescription() {\n return `at ${this.path} with parent ${this.parent}`;\n }\n}\nfunction createSubRouteRef(config) {\n const { id, path, parent } = config;\n const pathParams = path.split(\"/\").filter((p) => p.startsWith(\":\")).map((p) => p.substring(1));\n const params = [...parent.params, ...pathParams];\n if (parent.params.some((p) => pathParams.includes(p))) {\n throw new Error(\n \"SubRouteRef may not have params that overlap with its parent\"\n );\n }\n if (!path.startsWith(\"/\")) {\n throw new Error(`SubRouteRef path must start with '/', got '${path}'`);\n }\n if (path.endsWith(\"/\")) {\n throw new Error(`SubRouteRef path must not end with '/', got '${path}'`);\n }\n for (const param of pathParams) {\n if (!PARAM_PATTERN.test(param)) {\n throw new Error(`SubRouteRef path has invalid param, got '${param}'`);\n }\n }\n const subRouteRef = new SubRouteRefImpl(\n id,\n path,\n parent,\n params\n );\n return subRouteRef;\n}\n\nexport { SubRouteRefImpl, createSubRouteRef };\n//# sourceMappingURL=SubRouteRef.esm.js.map\n","import { routeRefType } from './types.esm.js';\n\nclass ExternalRouteRefImpl {\n [routeRefType] = \"external\";\n id;\n params;\n optional;\n defaultTarget;\n constructor(id, params, optional, defaultTarget) {\n this.id = id;\n this.params = params;\n this.optional = optional;\n this.defaultTarget = defaultTarget;\n }\n toString() {\n if (this.#nfsId) {\n return `externalRouteRef{id=${this.#nfsId},legacyId=${this.id}}`;\n }\n return `routeRef{type=external,id=${this.id}}`;\n }\n getDefaultTarget() {\n return this.defaultTarget;\n }\n // NFS implementation below\n $$type = \"@backstage/ExternalRouteRef\";\n version = \"v1\";\n T = void 0;\n #nfsId = void 0;\n getParams() {\n return this.params;\n }\n getDescription() {\n if (this.#nfsId) {\n return this.#nfsId;\n }\n return this.id;\n }\n setId(newId) {\n if (!newId) {\n throw new Error(`ExternalRouteRef id must be a non-empty string`);\n }\n if (this.#nfsId && this.#nfsId !== newId) {\n throw new Error(\n `ExternalRouteRef was referenced twice as both '${this.#nfsId}' and '${newId}'`\n );\n }\n this.#nfsId = newId;\n }\n}\nfunction createExternalRouteRef(options) {\n return new ExternalRouteRefImpl(\n options.id,\n options.params ?? [],\n Boolean(options.optional),\n options?.defaultTarget\n );\n}\n\nexport { ExternalRouteRefImpl, createExternalRouteRef };\n//# sourceMappingURL=ExternalRouteRef.esm.js.map\n","import { useParams } from 'react-router-dom';\n\nfunction useRouteRefParams(_routeRef) {\n return useParams();\n}\n\nexport { useRouteRefParams };\n//# sourceMappingURL=useRouteRefParams.esm.js.map\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","function isError(value) {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return false;\n }\n const maybe = value;\n if (typeof maybe.name !== \"string\" || maybe.name === \"\") {\n return false;\n }\n if (typeof maybe.message !== \"string\") {\n return false;\n }\n return true;\n}\nfunction assertError(value) {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new Error(`Encountered invalid error, not an object, got '${value}'`);\n }\n const maybe = value;\n if (typeof maybe.name !== \"string\" || maybe.name === \"\") {\n throw new Error(`Encountered error object without a name, got '${value}'`);\n }\n if (typeof maybe.message !== \"string\") {\n throw new Error(\n `Encountered error object without a message, got '${value}'`\n );\n }\n}\n\nexport { assertError, isError };\n//# sourceMappingURL=assertion.esm.js.map\n","import { stringifyError } from '../serialization/error.esm.js';\nimport { isError } from './assertion.esm.js';\n\nclass CustomErrorBase extends Error {\n /**\n * An inner error that caused this error to be thrown, if any.\n */\n cause;\n constructor(message, cause) {\n let fullMessage = message;\n if (cause !== void 0) {\n const causeStr = stringifyError(cause);\n if (fullMessage) {\n fullMessage += `; caused by ${causeStr}`;\n } else {\n fullMessage = `caused by ${causeStr}`;\n }\n }\n super(fullMessage);\n Error.captureStackTrace?.(this, this.constructor);\n if (!this.name || this.name === \"Error\") {\n const baseName = this.constructor.name;\n if (baseName !== \"Error\") {\n this.name = this.constructor.name;\n }\n }\n this.cause = isError(cause) ? cause : void 0;\n }\n}\n\nexport { CustomErrorBase };\n//# sourceMappingURL=CustomErrorBase.esm.js.map\n","import { serializeError as serializeError$1, deserializeError as deserializeError$1 } from 'serialize-error';\nimport { isError } from '../errors/assertion.esm.js';\n\nfunction serializeError(error, options) {\n const serialized = serializeError$1(error);\n const result = {\n name: \"Unknown\",\n message: \"<no reason given>\",\n ...serialized\n };\n if (!options?.includeStack) {\n delete result.stack;\n if (result.cause && typeof result.cause === \"object\" && \"stack\" in result.cause) {\n delete result.cause.stack;\n }\n }\n return result;\n}\nfunction deserializeError(data) {\n const result = deserializeError$1(data);\n if (!data.stack) {\n result.stack = void 0;\n }\n return result;\n}\nfunction stringifyError(error) {\n if (isError(error)) {\n const str = String(error);\n return str !== \"[object Object]\" ? str : `${error.name}: ${error.message}`;\n }\n return `unknown error '${error}'`;\n}\n\nexport { deserializeError, serializeError, stringifyError };\n//# sourceMappingURL=error.esm.js.map\n","import { isError } from './assertion.esm.js';\nimport { CustomErrorBase } from './CustomErrorBase.esm.js';\n\nclass InputError extends CustomErrorBase {\n name = \"InputError\";\n}\nclass AuthenticationError extends CustomErrorBase {\n name = \"AuthenticationError\";\n}\nclass NotAllowedError extends CustomErrorBase {\n name = \"NotAllowedError\";\n}\nclass NotFoundError extends CustomErrorBase {\n name = \"NotFoundError\";\n}\nclass ConflictError extends CustomErrorBase {\n name = \"ConflictError\";\n}\nclass NotModifiedError extends CustomErrorBase {\n name = \"NotModifiedError\";\n}\nclass NotImplementedError extends CustomErrorBase {\n name = \"NotImplementedError\";\n}\nclass ServiceUnavailableError extends CustomErrorBase {\n}\nclass ForwardedError extends CustomErrorBase {\n constructor(message, cause) {\n super(message, cause);\n this.name = isError(cause) ? cause.name : \"Error\";\n }\n}\n\nexport { AuthenticationError, ConflictError, ForwardedError, InputError, NotAllowedError, NotFoundError, NotImplementedError, NotModifiedError, ServiceUnavailableError };\n//# sourceMappingURL=common.esm.js.map\n","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n"],"names":["AnalyticsReactContext","createVersionedContext","useAnalyticsContext","theContext","useContext","routeRef","pluginId","extension","theValue","atVersion","Error","AnalyticsContext","options","attributes","children","combinedValue","versionedCombinedValue","createVersionedValueMap","jsx","Provider","value","analyticsApiRef","createApiRef","id","globalEvents","getOrCreateGlobalSingleton","mostRecentGatheredNavigation","mostRecentRoutableExtensionRender","beforeUnloadRegistered","routableExtensionRenderedEvent","Tracker","analyticsApi","context","constructor","this","addEventListener","captureEvent","once","passive","setContext","action","subject","_routeNodeType","e","console","warn","useAnalytics","trackerRef","useRef","useApi","useAnalyticsApi","tracker","current","legacyPluginStore","WeakMap","toLegacyPlugin","plugin","legacy","get","notImplemented","getId","routes","externalRoutes","getApis","getFeatureFlags","provide","set","toNewPlugin","createFrontendPlugin","useApp","apiHolder","useApiHolder","useOptionalApiHolder","appTreeApi","appTreeApiRef","iconsApi","iconsApiRef","versionedContext","useVersionedContext","newAppContext","useMemo","tree","getTree","gatheredPlugins","ErrorBoundaryFallbackWrapper","rest","ErrorDisplay","getPlugins","pluginSet","Set","node","nodes","values","spec","add","Array","from","getSystemIcon","key","getIcon","getSystemIcons","Object","fromEntries","listIconKeys","map","getComponents","NotFoundErrorPage","BootErrorPage","Progress","Router","ErrorBoundaryFallback","appContext","globalStore","componentDataKey","attachComponentData","component","type","data","dataComponent","container","Map","defineProperty","enumerable","configurable","writable","has","name","displayName","getComponentData","useRouteRef","pathname","useLocation","routeResolutionApi","routeResolutionApiRef","useRouteResolutionApi","resolver","newRouteFunc","resolve","sourcePath","legacyRouteFunc","isOptional2","optional","isOptional","PluginErrorBoundary","Component","getDerivedStateFromError","error","state","handleErrorReset","setState","render","app","props","resetError","createRoutableExtension","mountPoint","createReactExtension","lazy","then","InnerComponent","RoutableExtensionWrapper","analytics","message","startsWith","useEffect","componentName","createComponentExtension","lazyLoader","default","ofExtension","sync","expose","Result","Suspense","fallback","entries","selectChildren","rootNode","featureFlagsApi","selector","strictError","Children","toArray","flatMap","isValidElement","Fragment","isActive","with","without","Collection","selectByComponentData","query","selection","withStrictError","findComponentData","filter","getElements","useElementFilter","filterFn","dependencies","featureFlagsApiRef","elements","PluginImpl","config","apis","featureFlags","slice","toString","createPlugin","routeRefType","Symbol","RouteRefImpl","params","title","$$type","version","T","alias","getParams","getDescription","setId","newId","createRouteRef","PARAM_PATTERN","SubRouteRefImpl","path","parent","getParent","createSubRouteRef","pathParams","split","p","substring","some","includes","endsWith","param","test","ExternalRouteRefImpl","defaultTarget","getDefaultTarget","createExternalRouteRef","Boolean","useRouteRefParams","_routeRef","useParams","module","exports","isError","isArray","maybe","cause","fullMessage","causeStr","str","String","stringifyError","super","captureStackTrace","NotImplementedError","ForwardedError","f","k","for","l","m","prototype","hasOwnProperty","n","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","ref","__self","__source","q","c","a","g","b","d","h","call","defaultProps","$$typeof","_owner","jsxs"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunkinternal_plugin_kuadrant=self.webpackChunkinternal_plugin_kuadrant||[]).push([[3650],{14933:(e,n,t)=>{t.d(n,{c:()=>x});var a=t(31085),r=t(95478),s=t(76891),i=t(61477),o=t(46805),l=t(10394),d=t(72501),c=t(95061),p=t(48543),u=t(81215),h=t(26343),m=t(16249),y=t(93453),v=t(64947),A=t(78467),g=t(39053),f=t(22097);const x=({open:e,onClose:n,onSuccess:t,apiProductName:x,namespace:j,userEmail:b,plans:w})=>{const k=(0,f.useApi)(f.configApiRef),$=(0,f.useApi)(f.fetchApiRef),C=(0,f.useApi)(f.alertApiRef),P=k.getString("backend.baseUrl"),[S,q]=(0,r.useState)(""),[E,R]=(0,r.useState)(""),[I,T]=(0,r.useState)(!1),[z,K]=(0,r.useState)(null),B=()=>{q(""),R(""),K(null),n()};return(0,a.jsxs)(s.A,{open:e,onClose:B,maxWidth:"sm",fullWidth:!0,children:[(0,a.jsx)(i.A,{children:"Request API Access"}),(0,a.jsxs)(o.A,{children:[(0,a.jsxs)(l.A,{mb:2,p:1.5,bgcolor:"info.light",borderRadius:1,display:"flex",alignItems:"flex-start",style:{gap:8},children:[(0,a.jsx)(g.A,{color:"primary",fontSize:"small",style:{marginTop:2}}),(0,a.jsx)(d.A,{variant:"body2",children:"Your request will be reviewed by an API owner before access is granted."})]}),z&&(0,a.jsx)(l.A,{mb:2,p:2,bgcolor:"error.main",color:"error.contrastText",borderRadius:1,children:(0,a.jsx)(d.A,{variant:"body2",children:z})}),(0,a.jsxs)(c.A,{fullWidth:!0,margin:"normal",disabled:I,"data-testid":"tier-select-form",children:[(0,a.jsx)(p.A,{id:"tier-select-label",children:"Select Tier"}),(0,a.jsx)(u.A,{labelId:"tier-select-label","data-testid":"tier-select",value:S,onChange:e=>q(e.target.value),disabled:I,children:w.map(e=>{const n=Object.entries(e.limits||{}).map(([e,n])=>`${n} per ${e}`).join(", ");return(0,a.jsxs)(h.A,{value:e.tier,"data-testid":`tier-option-${e.tier}`,children:[e.tier," ",n?`(${n})`:""]},e.tier)})})]}),(0,a.jsx)(m.A,{label:"Use Case (optional)",placeholder:"Describe how you plan to use this API",multiline:!0,rows:3,fullWidth:!0,margin:"normal",value:E,onChange:e=>R(e.target.value),helperText:"Explain your intended use of this API for admin review",disabled:I})]}),(0,a.jsxs)(y.A,{children:[(0,a.jsx)(v.A,{onClick:B,disabled:I,children:"Cancel"}),(0,a.jsx)(v.A,{onClick:async()=>{if(S){T(!0),K(null);try{const e=await $.fetch(`${P}/api/kuadrant/requests`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiProductName:x,namespace:j,planTier:S,useCase:E.trim()||"",userEmail:b})});if(!e.ok){const n=await e.json().catch(()=>({}));throw new Error(n.error||`failed to create request: ${e.status}`)}C.post({message:"API key requested successfully",severity:"success",display:"transient"}),q(""),R(""),t()}catch(e){const n=e instanceof Error?e.message:"unknown error occurred";C.post({message:`Failed to request API key: ${n}`,severity:"error",display:"transient"}),K(n)}finally{T(!1)}}},color:"primary",variant:"contained",disabled:!S||I,startIcon:I?(0,a.jsx)(A.A,{size:16,color:"inherit"}):void 0,children:I?"Submitting...":"Submit Request"})]})]})}},18466:(e,n,t)=>{var a=t(4293),r=t(78920);n.A=void 0;var s=r(t(95478)),i=(0,a(t(74044)).default)(s.createElement("path",{d:"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"}),"Add");n.A=i},23650:(e,n,t)=>{t.r(n),t.d(n,{ApiKeyManagementTab:()=>W});var a=t(31085),r=t(95478),s=t(35015),i=t(82300),o=t(86687),l=t(42367),d=t(25010),c=t(10394),p=t(72501),u=t(31653),h=t(38605),m=t(67720),y=t(71677),v=t(29365),A=t(78467),g=t(42899),f=t(64947),x=t(37757),j=t(26343),b=t(76891),w=t(61477),k=t(46805),$=t(93453),C=t(22097),P=t(25467),S=t(32269),q=t(61524),E=t(93246),R=t(92399),I=t(18466),T=t(71407),z=t(99594),K=t(77225),B=t(34955),_=t(46205),H=t(16397),D=t(63221);function N(e,n,t){const a=t?`${t} `:"";return{curl:`curl -X GET ${e} \\\n -H "Authorization: ${t?`${t} ${n}`:n}"`,nodejs:`const fetch = require('node-fetch');\n\nconst apiKey = '${n}';\nconst endpoint = '${e}';\n\nfetch(endpoint, {\n method: 'GET',\n headers: {\n 'Authorization': '${a}' + apiKey\n }\n})\n .then(response => response.json())\n .then(data => console.log(data))\n .catch(error => console.error('Error:', error));`,python:`import requests\n\napi_key = '${n}'\nendpoint = '${e}'\n\nheaders = {\n 'Authorization': '${a}' + api_key\n}\n\nresponse = requests.get(endpoint, headers=headers)\nprint(response.json())`,go:`package main\n\nimport (\n "fmt"\n "net/http"\n "io"\n)\n\nfunc main() {\n apiKey := "${n}"\n endpoint := "${e}"\n\n client := &http.Client{}\n req, _ := http.NewRequest("GET", endpoint, nil)\n req.Header.Add("Authorization", "${a}" + apiKey)\n\n resp, err := client.Do(req)\n if err != nil {\n fmt.Println("Error:", err)\n return\n }\n defer resp.Body.Close()\n\n body, _ := io.ReadAll(resp.Body)\n fmt.Println(string(body))\n}`}}var G=t(14933);const W=({namespace:e})=>{var n,t,W,M,V;const{entity:L}=(0,P.tN)(),U=(0,C.useApi)(C.configApiRef),X=(0,C.useApi)(C.identityApiRef),F=(0,C.useApi)(C.fetchApiRef),O=(0,C.useApi)(C.alertApiRef),J=U.getString("backend.baseUrl"),[Y,Q]=(0,r.useState)(new Set),[Z,ee]=(0,r.useState)(0),[ne,te]=(0,r.useState)(""),[ae,re]=(0,r.useState)(""),[se,ie]=(0,r.useState)(!1),[oe,le]=(0,r.useState)(!1),[de,ce]=(0,r.useState)(null),[pe,ue]=(0,r.useState)(null),[he,me]=(0,r.useState)(null),[ye,ve]=(0,r.useState)(null),[Ae,ge]=(0,r.useState)(new Set),[fe,xe]=(0,r.useState)({open:!1,request:null}),[je,be]=(0,r.useState)(new Map),[we,ke]=(0,r.useState)(new Set),[$e,Ce]=(0,r.useState)(new Set),[Pe,Se]=(0,r.useState)(!1),[qe,Ee]=(0,r.useState)(null),Re=(null===(n=L.metadata.annotations)||void 0===n?void 0:n["kuadrant.io/apiproduct"])||L.metadata.name,Ie=(null===(t=L.metadata.annotations)||void 0===t?void 0:t["kuadrant.io/namespace"])||e||"default";(0,s.A)(async()=>{const e=await X.getBackstageIdentity(),n=await X.getProfileInfo();te(e.userEntityRef),re(n.email||"")},[X]);const{value:Te,loading:ze,error:Ke}=(0,s.A)(async()=>{const e=await F.fetch(`${J}/api/kuadrant/requests/my?namespace=${Ie}`);if(!e.ok)throw new Error("failed to fetch requests");return((await e.json()).items||[]).filter(e=>e.spec.apiProductRef.name===Re&&e.metadata.namespace===Ie)},[Re,Ie,Z,F,J]),{value:Be,loading:_e,error:He}=(0,s.A)(async()=>{var e;const n=await F.fetch(`${J}/api/kuadrant/apiproducts`);if(!n.ok)throw new Error("failed to fetch api products");return null===(e=(await n.json()).items)||void 0===e?void 0:e.find(e=>e.metadata.namespace===Ie&&e.metadata.name===Re)},[Ie,Re,F]),De=Be?`apiproduct:${Be.metadata.namespace}/${Be.metadata.name}`:void 0,{allowed:Ne,loading:Ge,error:We}=(0,_.l)(B.dp,De),{allowed:Me,loading:Ve,error:Le}=(0,_.l)(B.uL),{allowed:Ue,loading:Xe,error:Fe}=(0,_.l)(B.jH),{allowed:Oe,loading:Je,error:Ye}=(0,_.l)(B.q0),Qe=()=>{ue(null),me(null)},Ze=()=>{he&&(ce(he),le(!0),Qe())},en=()=>{if(!he)return;const e=he;Qe(),xe({open:!0,request:e})},nn=e=>{Q(n=>{const t=new Set(n);return t.has(e)?t.delete(e):t.add(e),t})},tn=(0,r.useMemo)(()=>[{render:e=>{var n;const t=e.rowData;if(!(null==t||null===(n=t.metadata)||void 0===n?void 0:n.name))return(0,a.jsx)(c.A,{});const r=`${t.metadata.namespace}/${t.metadata.name}`,s=je.get(r);return(0,a.jsx)(an,{request:t,apiName:Re,revealedApiKey:s})}}],[Re,je]),an=({request:e,apiName:n,revealedApiKey:t})=>{var s,o,l;const[d,m]=(0,r.useState)(0),y=(null===(s=e.status)||void 0===s?void 0:s.apiHostname)||`${n}.apps.example.com`,v=t||"<your-api-key>",A=function(e,n,t){const a=`https://${n}/api/v1/endpoint`;return e?e.authorizationHeader?N(a,t,e.authorizationHeader.prefix||""):e.customHeader?function(e,n,t,a){return{curl:`curl -X GET ${e} \\\n -H "${t}: ${a?`${a}${n}`:n}"`,nodejs:`const fetch = require('node-fetch');\n\nconst apiKey = '${n}';\nconst endpoint = '${e}';\n\nfetch(endpoint, {\n method: 'GET',\n headers: {\n '${t}': '${a}' + apiKey\n }\n})\n .then(response => response.json())\n .then(data => console.log(data))\n .catch(error => console.error('Error:', error));`,python:`import requests\n\napi_key = '${n}'\nendpoint = '${e}'\n\nheaders = {\n '${t}': '${a}' + api_key\n}\n\nresponse = requests.get(endpoint, headers=headers)\nprint(response.json())`,go:`package main\n\nimport (\n "fmt"\n "net/http"\n "io"\n)\n\nfunc main() {\n apiKey := "${n}"\n endpoint := "${e}"\n\n client := &http.Client{}\n req, _ := http.NewRequest("GET", endpoint, nil)\n req.Header.Add("${t}", "${a}" + apiKey)\n\n resp, err := client.Do(req)\n if err != nil {\n fmt.Println("Error:", err)\n return\n }\n defer resp.Body.Close()\n\n body, _ := io.ReadAll(resp.Body)\n fmt.Println(string(body))\n}`}}(a,t,e.customHeader.name,e.customHeader.prefix||""):e.queryString?function(e,n,t){return{curl:`curl -X GET "${e}?${t}=${n}"`,nodejs:`const fetch = require('node-fetch');\n\nconst apiKey = '${n}';\nconst endpoint = '${e}?${t}=' + apiKey;\n\nfetch(endpoint, {\n method: 'GET'\n})\n .then(response => response.json())\n .then(data => console.log(data))\n .catch(error => console.error('Error:', error));`,python:`import requests\n\napi_key = '${n}'\nendpoint = '${e}'\n\nparams = {\n '${t}': api_key\n}\n\nresponse = requests.get(endpoint, params=params)\nprint(response.json())`,go:`package main\n\nimport (\n "fmt"\n "net/http"\n "io"\n)\n\nfunc main() {\n apiKey := "${n}"\n endpoint := "${e}?${t}=" + apiKey\n\n client := &http.Client{}\n req, _ := http.NewRequest("GET", endpoint, nil)\n\n resp, err := client.Do(req)\n if err != nil {\n fmt.Println("Error:", err)\n return\n }\n defer resp.Body.Close()\n\n body, _ := io.ReadAll(resp.Body)\n fmt.Println(string(body))\n}`}}(a,t,e.queryString.name):e.cookie?function(e,n,t){return{curl:`curl -X GET ${e} \\\n --cookie "${t}=${n}"`,nodejs:`const fetch = require('node-fetch');\n\nconst apiKey = '${n}';\nconst endpoint = '${e}';\n\nfetch(endpoint, {\n method: 'GET',\n headers: {\n 'Cookie': '${t}=' + apiKey\n }\n})\n .then(response => response.json())\n .then(data => console.log(data))\n .catch(error => console.error('Error:', error));`,python:`import requests\n\napi_key = '${n}'\nendpoint = '${e}'\n\ncookies = {\n '${t}': api_key\n}\n\nresponse = requests.get(endpoint, cookies=cookies)\nprint(response.json())`,go:`package main\n\nimport (\n "fmt"\n "net/http"\n "io"\n)\n\nfunc main() {\n apiKey := "${n}"\n endpoint := "${e}"\n\n client := &http.Client{}\n req, _ := http.NewRequest("GET", endpoint, nil)\n req.AddCookie(&http.Cookie{\n Name: "${t}",\n Value: apiKey,\n })\n\n resp, err := client.Do(req)\n if err != nil {\n fmt.Println("Error:", err)\n return\n }\n defer resp.Body.Close()\n\n body, _ := io.ReadAll(resp.Body)\n fmt.Println(string(body))\n}`}}(a,t,e.cookie.name):N(a,t,"Bearer"):N(a,t,"Bearer")}(null===(l=e.status)||void 0===l||null===(o=l.authScheme)||void 0===o?void 0:o.credentials,y,v);return(0,a.jsxs)(c.A,{p:3,bgcolor:"background.default",onClick:e=>e.stopPropagation(),children:[e.spec.useCase&&(0,a.jsxs)(c.A,{mb:3,children:[(0,a.jsx)(p.A,{variant:"h6",gutterBottom:!0,children:"Use Case"}),(0,a.jsx)(c.A,{p:2,bgcolor:"background.paper",borderRadius:1,border:"1px solid rgba(0, 0, 0, 0.12)",children:(0,a.jsx)(p.A,{variant:"body2",style:{whiteSpace:"pre-wrap",wordBreak:"break-word",overflowWrap:"break-word"},children:e.spec.useCase})})]}),(0,a.jsx)(p.A,{variant:"h6",gutterBottom:!0,children:"Usage Examples"}),(0,a.jsxs)(p.A,{variant:"body2",paragraph:!0,children:["Use these code examples to test the API with your"," ",e.spec.planTier," tier key."]}),(0,a.jsx)(c.A,{onClick:e=>e.stopPropagation(),children:(0,a.jsxs)(u.A,{value:d,onChange:(e,n)=>{e.stopPropagation(),m(n)},indicatorColor:"primary",children:[(0,a.jsx)(h.A,{label:"cURL",onClick:e=>e.stopPropagation()}),(0,a.jsx)(h.A,{label:"Node.js",onClick:e=>e.stopPropagation()}),(0,a.jsx)(h.A,{label:"Python",onClick:e=>e.stopPropagation()}),(0,a.jsx)(h.A,{label:"Go",onClick:e=>e.stopPropagation()})]})}),(0,a.jsxs)(c.A,{mt:2,children:[0===d&&(0,a.jsx)(i.z,{text:A.curl,language:"bash",showCopyCodeButton:!0}),1===d&&(0,a.jsx)(i.z,{text:A.nodejs,language:"javascript",showCopyCodeButton:!0}),2===d&&(0,a.jsx)(i.z,{text:A.python,language:"python",showCopyCodeButton:!0}),3===d&&(0,a.jsx)(i.z,{text:A.go,language:"go",showCopyCodeButton:!0})]})]})},rn=Ke||He,sn=We||Le||Fe||Ye;if(ze||_e||Ge||Ve||Xe||Je)return(0,a.jsx)(o.k,{});if(rn)return(0,a.jsx)(l._,{error:rn});if(sn){const e=We?"kuadrant.apikey.create":Le?"kuadrant.apikey.delete.own":Fe?"kuadrant.apikey.delete.all":Ye?"kuadrant.apikey.update.own":"unknown";return(0,a.jsxs)(c.A,{p:2,children:[(0,a.jsxs)(p.A,{color:"error",children:["Unable to check permissions: ",sn.message]}),(0,a.jsxs)(p.A,{variant:"body2",color:"textSecondary",children:["Permission: ",e]}),(0,a.jsx)(p.A,{variant:"body2",color:"textSecondary",children:"Please try again or contact your administrator"})]})}const on=(Te||[]).filter(e=>!Ae.has(e.metadata.name)),ln=(null==Be||null===(W=Be.status)||void 0===W?void 0:W.discoveredPlans)||[],dn=on.filter(e=>{var n;return!(null===(n=e.status)||void 0===n?void 0:n.phase)||"Pending"===e.status.phase}),cn=on.filter(e=>{var n;return"Approved"===(null===(n=e.status)||void 0===n?void 0:n.phase)}),pn=on.filter(e=>{var n;return"Rejected"===(null===(n=e.status)||void 0===n?void 0:n.phase)}),un=[{title:"Tier",field:"spec.planTier",render:e=>(0,a.jsx)(m.A,{label:e.spec.planTier,color:"primary",size:"small"})},{title:"Approved",field:"status.reviewedAt",render:e=>{var n;return(0,a.jsx)(p.A,{variant:"body2",children:(null===(n=e.status)||void 0===n?void 0:n.reviewedAt)?new Date(e.status.reviewedAt).toLocaleDateString():"-"})}},{title:"API Key",field:"status.secretRef",searchable:!1,filtering:!1,render:e=>{var n,t,r;const s=`${e.metadata.namespace}/${e.metadata.name}`,i=Y.has(e.metadata.name),o=we.has(s),l=je.get(s),d=null===(t=e.status)||void 0===t||null===(n=t.secretRef)||void 0===n?void 0:n.name,u=!1!==(null===(r=e.status)||void 0===r?void 0:r.canReadSecret),h=$e.has(s)||!u;return d?h&&!l?(0,a.jsx)(y.Ay,{title:"This API key has already been viewed and cannot be retrieved again",children:(0,a.jsxs)(c.A,{display:"flex",alignItems:"center",children:[(0,a.jsx)(p.A,{variant:"body2",color:"textSecondary",style:{fontFamily:"monospace",marginRight:8},children:"Already viewed"}),(0,a.jsx)(q.A,{fontSize:"small",color:"disabled"})]})}):(0,a.jsxs)(c.A,{display:"flex",alignItems:"center",children:[(0,a.jsx)(p.A,{variant:"body2",style:{fontFamily:"monospace",marginRight:8},children:o?"Loading...":i&&l?l:"••••••••••••••••"}),i&&l&&(0,a.jsx)(y.Ay,{title:"Copy to clipboard",children:(0,a.jsx)(v.A,{size:"small",onClick:async()=>{l&&(await navigator.clipboard.writeText(l),O.post({message:"API key copied to clipboard",severity:"success",display:"transient"}))},children:(0,a.jsx)(z.A,{fontSize:"small"})})}),(0,a.jsx)(y.Ay,{title:i?"Hide API key":"Reveal API key (one-time only)",children:(0,a.jsx)("span",{children:(0,a.jsx)(v.A,{size:"small",onClick:()=>{i?(((e,n)=>{const t=`${e}/${n}`;be(e=>{const n=new Map(e);return n.delete(t),n})})(e.metadata.namespace,e.metadata.name),nn(e.metadata.name)):h||(Ee({namespace:e.metadata.namespace,name:e.metadata.name}),Se(!0))},disabled:o||h&&!l,children:i?(0,a.jsx)(q.A,{}):(0,a.jsx)(S.A,{})})})})]}):(0,a.jsx)(p.A,{variant:"body2",color:"textSecondary",children:"Awaiting secret..."})}},{title:"",field:"actions",searchable:!1,filtering:!1,render:e=>{if(ye===e.metadata.name)return(0,a.jsx)(A.A,{size:20});const n=e.spec.requestedBy.userId;return(0,_.W)(n,ne,Me,Ue)?(0,a.jsx)(v.A,{size:"small",onClick:n=>{n.stopPropagation();const t=n.currentTarget.getBoundingClientRect();ue({top:t.bottom,left:t.left}),me(e)},title:"Actions","aria-controls":pe?"actions-menu":void 0,"aria-haspopup":"true",children:(0,a.jsx)(T.A,{})}):null}}],hn=[{title:"Status",field:"status.phase",render:e=>{var n;const t=(null===(n=e.status)||void 0===n?void 0:n.phase)||"Pending",r="Pending"===t;return(0,a.jsx)(m.A,{label:t,size:"small",icon:r?(0,a.jsx)(E.A,{}):(0,a.jsx)(R.A,{}),color:r?"default":"secondary"})}},{title:"Tier",field:"spec.planTier",render:e=>(0,a.jsx)(m.A,{label:e.spec.planTier,color:"primary",size:"small"})},{title:"Use Case",field:"spec.useCase",render:e=>e.spec.useCase?(0,a.jsx)(y.Ay,{title:e.spec.useCase,placement:"top",children:(0,a.jsx)(p.A,{variant:"body2",style:{maxWidth:"200px",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.spec.useCase})}):(0,a.jsx)(p.A,{variant:"body2",children:"-"})},{title:"Requested",field:"metadata.creationTimestamp",render:e=>(0,a.jsx)(p.A,{variant:"body2",children:e.metadata.creationTimestamp?new Date(e.metadata.creationTimestamp).toLocaleDateString():"-"})},{title:"Reviewed",field:"status.reviewedAt",render:e=>{var n;return(null===(n=e.status)||void 0===n?void 0:n.reviewedAt)?(0,a.jsx)(p.A,{variant:"body2",children:new Date(e.status.reviewedAt).toLocaleDateString()}):(0,a.jsx)(p.A,{variant:"body2",children:"-"})}},{title:"",field:"actions",searchable:!1,filtering:!1,render:e=>{var n;if(ye===e.metadata.name)return(0,a.jsx)(A.A,{size:20});const t=!(null===(n=e.status)||void 0===n?void 0:n.phase)||"Pending"===e.status.phase,r=e.spec.requestedBy.userId,s=(0,_.W)(r,ne,Me,Ue);return t&&(Oe&&r===ne||s)?(0,a.jsx)(v.A,{size:"small",onClick:n=>{n.stopPropagation();const t=n.currentTarget.getBoundingClientRect();ue({top:t.bottom,left:t.left}),me(e)},title:"Actions","aria-controls":pe?"actions-menu":void 0,"aria-haspopup":"true",children:(0,a.jsx)(T.A,{})}):null}}],mn=hn.filter(e=>"Reviewed"!==e.title&&"Reason"!==e.title);return(0,a.jsxs)(c.A,{p:2,children:[(0,a.jsxs)(g.A,{container:!0,spacing:3,direction:"column",children:[Ne&&(0,a.jsx)(g.A,{item:!0,children:(0,a.jsxs)(c.A,{display:"flex",flexDirection:"column",alignItems:"flex-end",mb:2,children:[(0,a.jsx)(f.A,{variant:"contained",color:"primary",startIcon:(0,a.jsx)(I.A,{}),onClick:()=>ie(!0),disabled:0===ln.length,"data-testid":"request-api-access-button","data-plans-count":ln.length,children:"Request API Access"}),0===ln.length&&(0,a.jsx)(p.A,{variant:"caption",color:"textSecondary",style:{marginTop:4},"data-testid":"no-plans-message",children:Be?(()=>{var e,n,t,a;const r=null===(n=Be.status)||void 0===n||null===(e=n.conditions)||void 0===e?void 0:e.find(e=>"Ready"===e.type),s=null===(a=Be.status)||void 0===a||null===(t=a.conditions)||void 0===t?void 0:t.find(e=>"PlanPolicyDiscovered"===e.type);return"True"!==(null==r?void 0:r.status)?`HTTPRoute not ready: ${(null==r?void 0:r.message)||"unknown"}`:"True"!==(null==s?void 0:s.status)?`No plans discovered: ${(null==s?void 0:s.message)||"no PlanPolicy found"}`:"No plans available"})():"API product not found"})]})}),0===dn.length&&0===pn.length&&0===cn.length&&(0,a.jsx)(g.A,{item:!0,children:(0,a.jsx)(c.A,{p:3,textAlign:"center",children:(0,a.jsx)(p.A,{variant:"body1",color:"textSecondary",children:"No API keys yet. Request access to get started."})})}),dn.length>0&&(0,a.jsx)(g.A,{item:!0,children:(0,a.jsx)(d.X,{title:"Pending Requests",options:{paging:dn.length>5,pageSize:20,search:!0,filtering:!0,debounceInterval:300,toolbar:!0,emptyRowsWhenPaging:!1},columns:mn,data:dn})}),pn.length>0&&(0,a.jsx)(g.A,{item:!0,children:(0,a.jsx)(d.X,{title:"Rejected Requests",options:{paging:pn.length>5,pageSize:20,search:!0,filtering:!0,debounceInterval:300,toolbar:!0,emptyRowsWhenPaging:!1},columns:hn,data:pn})}),cn.length>0&&(0,a.jsx)(g.A,{item:!0,children:(0,a.jsx)(d.X,{title:"API Keys",options:{paging:cn.length>5,pageSize:20,search:!0,filtering:!0,debounceInterval:300,toolbar:!0,emptyRowsWhenPaging:!1},columns:un,data:cn,detailPanel:tn},"api-keys-table")})]}),(0,a.jsx)(G.c,{open:se,onClose:()=>ie(!1),onSuccess:()=>{ie(!1),ee(e=>e+1)},apiProductName:Re,namespace:Ie,userEmail:ae,plans:ln}),(0,a.jsx)(x.A,{id:"actions-menu",open:Boolean(pe),onClose:Qe,anchorReference:"anchorPosition",anchorPosition:pe||{top:0,left:0},children:he&&(()=>{var e;const n=!(null===(e=he.status)||void 0===e?void 0:e.phase)||"Pending"===he.status.phase,t=he.spec.requestedBy.userId,r=[];return Oe&&t===ne&&n&&r.push((0,a.jsx)(j.A,{onClick:Ze,children:"Edit"},"edit")),r.push((0,a.jsx)(j.A,{onClick:en,children:"Delete"},"delete")),r})()}),de&&(0,a.jsx)(H.e,{open:oe,onClose:()=>{le(!1),ce(null)},onSuccess:()=>{ee(e=>e+1),le(!1),O.post({message:"API key updated",severity:"success",display:"transient"}),ce(null)},request:de,availablePlans:ln}),(0,a.jsx)(D.K,{open:fe.open,title:"Delete Request",description:`Are you sure you want to delete this ${"Approved"===(null===(V=fe.request)||void 0===V||null===(M=V.status)||void 0===M?void 0:M.phase)?"API key":"request"}?`,deleting:null!==ye,onConfirm:async()=>{fe.request&&(await(async e=>{ge(n=>new Set(n).add(e)),ve(e);try{if(!(await F.fetch(`${J}/api/kuadrant/requests/${Ie}/${e}`,{method:"DELETE"})).ok)throw new Error("failed to delete request");O.post({message:"API key deleted successfully",severity:"success",display:"transient"}),ee(e=>e+1)}catch(n){const t=n instanceof Error?n.message:"unknown error occurred";ge(n=>{const t=new Set(n);return t.delete(e),t}),O.post({message:`Failed to delete API key: ${t}`,severity:"error",display:"transient"})}finally{ve(null)}})(fe.request.metadata.name),xe({open:!1,request:null}))},onCancel:()=>{xe({open:!1,request:null})}}),(0,a.jsxs)(b.A,{open:Pe,onClose:()=>{Se(!1),Ee(null)},maxWidth:"sm",children:[(0,a.jsx)(w.A,{children:(0,a.jsxs)(c.A,{display:"flex",alignItems:"center",children:[(0,a.jsx)(K.A,{color:"primary",style:{marginRight:8}}),"View API Key"]})}),(0,a.jsxs)(k.A,{children:[(0,a.jsxs)(p.A,{variant:"body1",paragraph:!0,children:["This API key can only be viewed ",(0,a.jsx)("strong",{children:"once"}),". After you reveal it, you will not be able to retrieve it again."]}),(0,a.jsx)(p.A,{variant:"body2",color:"textSecondary",children:"Make sure to copy and store it securely before closing this view."})]}),(0,a.jsxs)($.A,{children:[(0,a.jsx)(f.A,{onClick:()=>{Se(!1),Ee(null)},children:"Cancel"}),(0,a.jsx)(f.A,{variant:"contained",color:"primary",onClick:()=>{qe&&((async(e,n)=>{const t=`${e}/${n}`;if(!we.has(t)){ke(e=>new Set(e).add(t));try{const a=await F.fetch(`${J}/api/kuadrant/apikeys/${e}/${n}/secret`);if(a.ok){const e=await a.json();be(n=>new Map(n).set(t,e.apiKey)),Ce(e=>new Set(e).add(t))}else 403===a.status&&(Ce(e=>new Set(e).add(t)),O.post({message:"This API key has already been viewed and cannot be retrieved again.",severity:"warning",display:"transient"}))}catch(e){const n=e instanceof Error?e.message:"unknown error occurred";O.post({message:`Failed to fetch api key: ${n}`,severity:"error",display:"transient"})}finally{ke(e=>{const n=new Set(e);return n.delete(t),n})}}})(qe.namespace,qe.name),nn(qe.name)),Se(!1),Ee(null)},children:"Reveal API Key"})]})]})]})}},25467:(e,n,t)=>{t.d(n,{tN:()=>r}),t(31085),t(22097);var a=t(15427);function r(){const e=(0,a.useVersionedContext)("entity-context");if(!e)throw new Error("Entity context is not available");const n=e.atVersion(1);if(!n)throw new Error("EntityContext v1 not available");if(!n.entity)throw new Error("useEntity hook is being called outside of an EntityLayout where the entity has not been loaded. If this is intentional, please use useAsyncEntity instead.");return{entity:n.entity}}(0,a.createVersionedContext)("entity-context")},39053:(e,n,t)=>{var a=t(4293),r=t(78920);n.A=void 0;var s=r(t(95478)),i=(0,a(t(74044)).default)(s.createElement("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"}),"Info");n.A=i},71407:(e,n,t)=>{var a=t(4293),r=t(78920);n.A=void 0;var s=r(t(95478)),i=(0,a(t(74044)).default)(s.createElement("path",{d:"M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"}),"MoreVert");n.A=i},77225:(e,n,t)=>{var a=t(4293),r=t(78920);n.A=void 0;var s=r(t(95478)),i=(0,a(t(74044)).default)(s.createElement("path",{d:"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z"}),"Warning");n.A=i},93246:(e,n,t)=>{var a=t(4293),r=t(78920);n.A=void 0;var s=r(t(95478)),i=(0,a(t(74044)).default)(s.createElement("path",{d:"M6 2v6h.01L6 8.01 10 12l-4 4 .01.01H6V22h12v-5.99h-.01L18 16l-4-4 4-3.99-.01-.01H18V2H6zm10 14.5V20H8v-3.5l4-4 4 4zm-4-5l-4-4V4h8v3.5l-4 4z"}),"HourglassEmpty");n.A=i}}]);
2
+ //# sourceMappingURL=3650.4f0dc550.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static/3650.4f0dc550.chunk.js","mappings":"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","sources":["webpack://internal.plugin-kuadrant/./src/components/RequestAccessDialog/RequestAccessDialog.tsx","webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/icons/Add.js","webpack://internal.plugin-kuadrant/./src/utils/codeSnippets.ts","webpack://internal.plugin-kuadrant/./src/components/ApiKeyManagementTab/ApiKeyManagementTab.tsx","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog-react/dist/hooks/useEntity.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/icons/Info.js","webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/icons/MoreVert.js","webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/icons/Warning.js","webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/icons/HourglassEmpty.js"],"sourcesContent":["import React, { useState } from 'react';\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Button,\n TextField,\n Select,\n MenuItem,\n FormControl,\n InputLabel,\n Box,\n Typography,\n CircularProgress,\n} from '@material-ui/core';\nimport InfoIcon from '@material-ui/icons/Info';\nimport {\n useApi,\n configApiRef,\n fetchApiRef,\n alertApiRef,\n} from '@backstage/core-plugin-api';\n\nexport interface Plan {\n tier: string;\n limits?: Record<string, number>;\n}\n\nexport interface RequestAccessDialogProps {\n open: boolean;\n onClose: () => void;\n onSuccess: () => void;\n apiProductName: string;\n namespace: string;\n userEmail: string;\n plans: Plan[];\n}\n\nexport const RequestAccessDialog = ({\n open,\n onClose,\n onSuccess,\n apiProductName,\n namespace,\n userEmail,\n plans,\n}: RequestAccessDialogProps) => {\n const config = useApi(configApiRef);\n const fetchApi = useApi(fetchApiRef);\n const alertApi = useApi(alertApiRef);\n const backendUrl = config.getString('backend.baseUrl');\n\n const [selectedPlan, setSelectedPlan] = useState('');\n const [useCase, setUseCase] = useState('');\n const [creating, setCreating] = useState(false);\n const [createError, setCreateError] = useState<string | null>(null);\n\n const handleClose = () => {\n setSelectedPlan('');\n setUseCase('');\n setCreateError(null);\n onClose();\n };\n\n const handleRequestAccess = async () => {\n if (!selectedPlan) return;\n\n setCreating(true);\n setCreateError(null);\n try {\n const response = await fetchApi.fetch(\n `${backendUrl}/api/kuadrant/requests`,\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n apiProductName,\n namespace,\n planTier: selectedPlan,\n useCase: useCase.trim() || '',\n userEmail,\n }),\n },\n );\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}));\n throw new Error(\n errorData.error || `failed to create request: ${response.status}`,\n );\n }\n\n alertApi.post({\n message: 'API key requested successfully',\n severity: 'success',\n display: 'transient',\n });\n\n setSelectedPlan('');\n setUseCase('');\n onSuccess();\n } catch (err) {\n const errorMessage =\n err instanceof Error ? err.message : 'unknown error occurred';\n alertApi.post({\n message: `Failed to request API key: ${errorMessage}`,\n severity: 'error',\n display: 'transient',\n });\n setCreateError(errorMessage);\n } finally {\n setCreating(false);\n }\n };\n\n return (\n <Dialog open={open} onClose={handleClose} maxWidth=\"sm\" fullWidth>\n <DialogTitle>Request API Access</DialogTitle>\n <DialogContent>\n <Box\n mb={2}\n p={1.5}\n bgcolor=\"info.light\"\n borderRadius={1}\n display=\"flex\"\n alignItems=\"flex-start\"\n style={{ gap: 8 }}\n >\n <InfoIcon\n color=\"primary\"\n fontSize=\"small\"\n style={{ marginTop: 2 }}\n />\n <Typography variant=\"body2\">\n Your request will be reviewed by an API owner before access is\n granted.\n </Typography>\n </Box>\n {createError && (\n <Box\n mb={2}\n p={2}\n bgcolor=\"error.main\"\n color=\"error.contrastText\"\n borderRadius={1}\n >\n <Typography variant=\"body2\">{createError}</Typography>\n </Box>\n )}\n <FormControl\n fullWidth\n margin=\"normal\"\n disabled={creating}\n data-testid=\"tier-select-form\"\n >\n <InputLabel id=\"tier-select-label\">Select Tier</InputLabel>\n <Select\n labelId=\"tier-select-label\"\n data-testid=\"tier-select\"\n value={selectedPlan}\n onChange={(e) => setSelectedPlan(e.target.value as string)}\n disabled={creating}\n >\n {plans.map((plan: Plan) => {\n const limitDesc = Object.entries(plan.limits || {})\n .map(([key, val]) => `${val} per ${key}`)\n .join(', ');\n return (\n <MenuItem\n key={plan.tier}\n value={plan.tier}\n data-testid={`tier-option-${plan.tier}`}\n >\n {plan.tier} {limitDesc ? `(${limitDesc})` : ''}\n </MenuItem>\n );\n })}\n </Select>\n </FormControl>\n <TextField\n label=\"Use Case (optional)\"\n placeholder=\"Describe how you plan to use this API\"\n multiline\n rows={3}\n fullWidth\n margin=\"normal\"\n value={useCase}\n onChange={(e) => setUseCase(e.target.value)}\n helperText=\"Explain your intended use of this API for admin review\"\n disabled={creating}\n />\n </DialogContent>\n <DialogActions>\n <Button onClick={handleClose} disabled={creating}>\n Cancel\n </Button>\n <Button\n onClick={handleRequestAccess}\n color=\"primary\"\n variant=\"contained\"\n disabled={!selectedPlan || creating}\n startIcon={\n creating ? (\n <CircularProgress size={16} color=\"inherit\" />\n ) : undefined\n }\n >\n {creating ? 'Submitting...' : 'Submit Request'}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\"\n}), 'Add');\n\nexports.default = _default;","import { Credentials } from '../types/api-management';\n\nexport interface CodeSnippets {\n curl: string;\n nodejs: string;\n python: string;\n go: string;\n}\n\nexport function generateAuthCodeSnippets(\n credentials: Credentials | undefined,\n hostname: string,\n apiKey: string,\n): CodeSnippets {\n const baseUrl = `https://${hostname}/api/v1/endpoint`;\n\n if (!credentials) {\n return generateAuthorizationHeaderSnippets(baseUrl, apiKey, 'Bearer');\n }\n\n if (credentials.authorizationHeader) {\n const prefix = credentials!.authorizationHeader!.prefix || '';\n return generateAuthorizationHeaderSnippets(baseUrl, apiKey, prefix);\n }\n\n if (credentials.customHeader) {\n const headerName = credentials!.customHeader!.name;\n const prefix = credentials!.customHeader!.prefix || '';\n return generateCustomHeaderSnippets(baseUrl, apiKey, headerName, prefix);\n }\n\n\n if (credentials.queryString) {\n const paramName = credentials!.queryString!.name;\n return generateQueryStringSnippets(baseUrl, apiKey, paramName);\n }\n\n if (credentials.cookie) {\n const cookieName = credentials!.cookie!.name;\n return generateCookieSnippets(baseUrl, apiKey, cookieName);\n }\n // Default to Authorization Bearer if no authScheme specified\n return generateAuthorizationHeaderSnippets(baseUrl, apiKey, 'Bearer');\n}\n\nfunction generateAuthorizationHeaderSnippets(\n baseUrl: string,\n apiKey: string,\n prefix: string,\n): CodeSnippets {\n const authValue = prefix ? `${prefix} ${apiKey}` : apiKey;\n const prefixWithSpace = prefix ? `${prefix} ` : '';\n\n return {\n curl: `curl -X GET ${baseUrl} \\\\\n -H \"Authorization: ${authValue}\"`,\n\n nodejs: `const fetch = require('node-fetch');\n\nconst apiKey = '${apiKey}';\nconst endpoint = '${baseUrl}';\n\nfetch(endpoint, {\n method: 'GET',\n headers: {\n 'Authorization': '${prefixWithSpace}' + apiKey\n }\n})\n .then(response => response.json())\n .then(data => console.log(data))\n .catch(error => console.error('Error:', error));`,\n\n python: `import requests\n\napi_key = '${apiKey}'\nendpoint = '${baseUrl}'\n\nheaders = {\n 'Authorization': '${prefixWithSpace}' + api_key\n}\n\nresponse = requests.get(endpoint, headers=headers)\nprint(response.json())`,\n\n go: `package main\n\nimport (\n \"fmt\"\n \"net/http\"\n \"io\"\n)\n\nfunc main() {\n apiKey := \"${apiKey}\"\n endpoint := \"${baseUrl}\"\n\n client := &http.Client{}\n req, _ := http.NewRequest(\"GET\", endpoint, nil)\n req.Header.Add(\"Authorization\", \"${prefixWithSpace}\" + apiKey)\n\n resp, err := client.Do(req)\n if err != nil {\n fmt.Println(\"Error:\", err)\n return\n }\n defer resp.Body.Close()\n\n body, _ := io.ReadAll(resp.Body)\n fmt.Println(string(body))\n}`,\n };\n}\n\nfunction generateCustomHeaderSnippets(\n baseUrl: string,\n apiKey: string,\n headerName: string,\n prefix: string,\n): CodeSnippets {\n const headerValue = prefix ? `${prefix}${apiKey}` : apiKey;\n\n return {\n curl: `curl -X GET ${baseUrl} \\\\\n -H \"${headerName}: ${headerValue}\"`,\n\n nodejs: `const fetch = require('node-fetch');\n\nconst apiKey = '${apiKey}';\nconst endpoint = '${baseUrl}';\n\nfetch(endpoint, {\n method: 'GET',\n headers: {\n '${headerName}': '${prefix}' + apiKey\n }\n})\n .then(response => response.json())\n .then(data => console.log(data))\n .catch(error => console.error('Error:', error));`,\n\n python: `import requests\n\napi_key = '${apiKey}'\nendpoint = '${baseUrl}'\n\nheaders = {\n '${headerName}': '${prefix}' + api_key\n}\n\nresponse = requests.get(endpoint, headers=headers)\nprint(response.json())`,\n\n go: `package main\n\nimport (\n \"fmt\"\n \"net/http\"\n \"io\"\n)\n\nfunc main() {\n apiKey := \"${apiKey}\"\n endpoint := \"${baseUrl}\"\n\n client := &http.Client{}\n req, _ := http.NewRequest(\"GET\", endpoint, nil)\n req.Header.Add(\"${headerName}\", \"${prefix}\" + apiKey)\n\n resp, err := client.Do(req)\n if err != nil {\n fmt.Println(\"Error:\", err)\n return\n }\n defer resp.Body.Close()\n\n body, _ := io.ReadAll(resp.Body)\n fmt.Println(string(body))\n}`,\n };\n}\n\nfunction generateQueryStringSnippets(\n baseUrl: string,\n apiKey: string,\n paramName: string,\n): CodeSnippets {\n const urlWithParam = `${baseUrl}?${paramName}=${apiKey}`;\n\n return {\n curl: `curl -X GET \"${urlWithParam}\"`,\n\n nodejs: `const fetch = require('node-fetch');\n\nconst apiKey = '${apiKey}';\nconst endpoint = '${baseUrl}?${paramName}=' + apiKey;\n\nfetch(endpoint, {\n method: 'GET'\n})\n .then(response => response.json())\n .then(data => console.log(data))\n .catch(error => console.error('Error:', error));`,\n\n python: `import requests\n\napi_key = '${apiKey}'\nendpoint = '${baseUrl}'\n\nparams = {\n '${paramName}': api_key\n}\n\nresponse = requests.get(endpoint, params=params)\nprint(response.json())`,\n\n go: `package main\n\nimport (\n \"fmt\"\n \"net/http\"\n \"io\"\n)\n\nfunc main() {\n apiKey := \"${apiKey}\"\n endpoint := \"${baseUrl}?${paramName}=\" + apiKey\n\n client := &http.Client{}\n req, _ := http.NewRequest(\"GET\", endpoint, nil)\n\n resp, err := client.Do(req)\n if err != nil {\n fmt.Println(\"Error:\", err)\n return\n }\n defer resp.Body.Close()\n\n body, _ := io.ReadAll(resp.Body)\n fmt.Println(string(body))\n}`,\n };\n}\n\nfunction generateCookieSnippets(\n baseUrl: string,\n apiKey: string,\n cookieName: string,\n): CodeSnippets {\n return {\n curl: `curl -X GET ${baseUrl} \\\\\n --cookie \"${cookieName}=${apiKey}\"`,\n\n nodejs: `const fetch = require('node-fetch');\n\nconst apiKey = '${apiKey}';\nconst endpoint = '${baseUrl}';\n\nfetch(endpoint, {\n method: 'GET',\n headers: {\n 'Cookie': '${cookieName}=' + apiKey\n }\n})\n .then(response => response.json())\n .then(data => console.log(data))\n .catch(error => console.error('Error:', error));`,\n\n python: `import requests\n\napi_key = '${apiKey}'\nendpoint = '${baseUrl}'\n\ncookies = {\n '${cookieName}': api_key\n}\n\nresponse = requests.get(endpoint, cookies=cookies)\nprint(response.json())`,\n\n go: `package main\n\nimport (\n \"fmt\"\n \"net/http\"\n \"io\"\n)\n\nfunc main() {\n apiKey := \"${apiKey}\"\n endpoint := \"${baseUrl}\"\n\n client := &http.Client{}\n req, _ := http.NewRequest(\"GET\", endpoint, nil)\n req.AddCookie(&http.Cookie{\n Name: \"${cookieName}\",\n Value: apiKey,\n })\n\n resp, err := client.Do(req)\n if err != nil {\n fmt.Println(\"Error:\", err)\n return\n }\n defer resp.Body.Close()\n\n body, _ := io.ReadAll(resp.Body)\n fmt.Println(string(body))\n}`,\n };\n}\n","import React, { useState, useMemo } from \"react\";\nimport { useAsync } from \"react-use\";\nimport {\n Table,\n TableColumn,\n Progress,\n ResponseErrorPanel,\n CodeSnippet,\n} from \"@backstage/core-components\";\nimport {\n IconButton,\n Typography,\n Box,\n Chip,\n Grid,\n Button,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Tabs,\n Tab,\n Menu,\n MenuItem,\n Tooltip,\n CircularProgress,\n} from \"@material-ui/core\";\nimport {\n useApi,\n configApiRef,\n identityApiRef,\n fetchApiRef,\n alertApiRef,\n} from \"@backstage/core-plugin-api\";\nimport { useEntity } from \"@backstage/plugin-catalog-react\";\nimport VisibilityIcon from \"@material-ui/icons/Visibility\";\nimport VisibilityOffIcon from \"@material-ui/icons/VisibilityOff\";\nimport HourglassEmptyIcon from \"@material-ui/icons/HourglassEmpty\";\nimport CancelIcon from \"@material-ui/icons/Cancel\";\nimport AddIcon from \"@material-ui/icons/Add\";\nimport MoreVertIcon from \"@material-ui/icons/MoreVert\";\nimport FileCopyIcon from \"@material-ui/icons/FileCopy\";\nimport WarningIcon from \"@material-ui/icons/Warning\";\nimport { APIKey } from \"../../types/api-management\";\nimport {\n kuadrantApiKeyCreatePermission,\n kuadrantApiKeyDeleteOwnPermission,\n kuadrantApiKeyDeleteAllPermission,\n kuadrantApiKeyUpdateOwnPermission,\n} from \"../../permissions\";\nimport {\n useKuadrantPermission,\n canDeleteResource,\n} from \"../../utils/permissions\";\nimport { EditAPIKeyDialog } from \"../EditAPIKeyDialog\";\nimport { ConfirmDeleteDialog } from \"../ConfirmDeleteDialog\";\nimport { generateAuthCodeSnippets } from \"../../utils/codeSnippets\";\nimport { RequestAccessDialog } from \"../RequestAccessDialog\";\n\ninterface APIProduct {\n metadata: {\n name: string;\n namespace: string;\n };\n spec: {\n displayName?: string;\n };\n status?: {\n discoveredPlans?: Array<{\n tier: string;\n description?: string;\n limits?: any;\n }>;\n conditions?: Array<{\n type: string;\n status: \"True\" | \"False\" | \"Unknown\";\n reason?: string;\n message?: string;\n lastTransitionTime?: string;\n }>;\n };\n}\n\ninterface Plan {\n tier: string;\n limits: any;\n}\n\nexport interface ApiKeyManagementTabProps {\n namespace?: string;\n}\n\nexport const ApiKeyManagementTab = ({\n namespace: propNamespace,\n}: ApiKeyManagementTabProps) => {\n const { entity } = useEntity();\n const config = useApi(configApiRef);\n const identityApi = useApi(identityApiRef);\n const fetchApi = useApi(fetchApiRef);\n const alertApi = useApi(alertApiRef);\n const backendUrl = config.getString(\"backend.baseUrl\");\n const [visibleKeys, setVisibleKeys] = useState<Set<string>>(new Set());\n const [refresh, setRefresh] = useState(0);\n const [userId, setUserId] = useState<string>(\"\");\n const [userEmail, setUserEmail] = useState<string>(\"\");\n const [requestDialogOpen, setRequestDialogOpen] = useState(false);\n const [editDialogOpen, setEditDialogOpen] = useState(false);\n const [requestToEdit, setRequestToEdit] = useState<APIKey | null>(null);\n const [menuAnchor, setMenuAnchor] = useState<{\n top: number;\n left: number;\n } | null>(null);\n const [menuRequest, setMenuRequest] = useState<APIKey | null>(null);\n const [deleting, setDeleting] = useState<string | null>(null);\n const [optimisticallyDeleted, setOptimisticallyDeleted] = useState<\n Set<string>\n >(new Set());\n const [deleteDialogState, setDeleteDialogState] = useState<{\n open: boolean;\n request: APIKey | null;\n }>({ open: false, request: null });\n const [apiKeyValues, setApiKeyValues] = useState<Map<string, string>>(\n new Map(),\n );\n const [apiKeyLoading, setApiKeyLoading] = useState<Set<string>>(new Set());\n const [alreadyReadKeys, setAlreadyReadKeys] = useState<Set<string>>(\n new Set(),\n );\n const [showOnceWarningOpen, setShowOnceWarningOpen] = useState(false);\n const [pendingKeyReveal, setPendingKeyReveal] = useState<{\n namespace: string;\n name: string;\n } | null>(null);\n\n // get apiproduct name from entity annotation (set by entity provider)\n const apiProductName =\n entity.metadata.annotations?.[\"kuadrant.io/apiproduct\"] ||\n entity.metadata.name;\n const namespace =\n entity.metadata.annotations?.[\"kuadrant.io/namespace\"] ||\n propNamespace ||\n \"default\";\n\n useAsync(async () => {\n const identity = await identityApi.getBackstageIdentity();\n const profile = await identityApi.getProfileInfo();\n setUserId(identity.userEntityRef);\n setUserEmail(profile.email || \"\");\n }, [identityApi]);\n\n const {\n value: requests,\n loading: requestsLoading,\n error: requestsError,\n } = useAsync(async () => {\n const response = await fetchApi.fetch(\n `${backendUrl}/api/kuadrant/requests/my?namespace=${namespace}`,\n );\n if (!response.ok) {\n throw new Error(\"failed to fetch requests\");\n }\n const data = await response.json();\n // filter by apiproduct name, not httproute name\n return (data.items || []).filter(\n (r: APIKey) =>\n r.spec.apiProductRef.name === apiProductName &&\n r.metadata.namespace === namespace, // APIProducts and APIKeys (and its Secret) will be in the same NS\n );\n }, [apiProductName, namespace, refresh, fetchApi, backendUrl]);\n\n const {\n value: apiProduct,\n loading: plansLoading,\n error: plansError,\n } = useAsync(async () => {\n const response = await fetchApi.fetch(\n `${backendUrl}/api/kuadrant/apiproducts`,\n );\n if (!response.ok) {\n throw new Error(\"failed to fetch api products\");\n }\n const data = await response.json();\n\n const product = data.items?.find(\n (p: APIProduct) =>\n p.metadata.namespace === namespace &&\n p.metadata.name === apiProductName,\n );\n\n return product;\n }, [namespace, apiProductName, fetchApi]);\n\n // check permissions with resource reference once we have the apiproduct\n const resourceRef = apiProduct\n ? `apiproduct:${apiProduct.metadata.namespace}/${apiProduct.metadata.name}`\n : undefined;\n\n const {\n allowed: canCreateRequest,\n loading: createRequestPermissionLoading,\n error: createRequestPermissionError,\n } = useKuadrantPermission(kuadrantApiKeyCreatePermission, resourceRef);\n\n const {\n allowed: canDeleteOwnKey,\n loading: deleteOwnPermissionLoading,\n error: deleteOwnPermissionError,\n } = useKuadrantPermission(kuadrantApiKeyDeleteOwnPermission);\n\n const {\n allowed: canDeleteAllKeys,\n loading: deleteAllPermissionLoading,\n error: deleteAllPermissionError,\n } = useKuadrantPermission(kuadrantApiKeyDeleteAllPermission);\n\n const {\n allowed: canUpdateRequest,\n loading: updateRequestPermissionLoading,\n error: updateRequestPermissionError,\n } = useKuadrantPermission(kuadrantApiKeyUpdateOwnPermission);\n\n const handleDeleteRequest = async (name: string) => {\n // optimistic update - remove from UI immediately\n setOptimisticallyDeleted((prev) => new Set(prev).add(name));\n setDeleting(name);\n try {\n const response = await fetchApi.fetch(\n `${backendUrl}/api/kuadrant/requests/${namespace}/${name}`,\n { method: \"DELETE\" },\n );\n if (!response.ok) {\n throw new Error(\"failed to delete request\");\n }\n alertApi.post({\n message: \"API key deleted successfully\",\n severity: \"success\",\n display: \"transient\",\n });\n setRefresh((r) => r + 1);\n } catch (err) {\n const errorMessage =\n err instanceof Error ? err.message : \"unknown error occurred\";\n // rollback optimistic update on error\n setOptimisticallyDeleted((prev) => {\n const next = new Set(prev);\n next.delete(name);\n return next;\n });\n alertApi.post({\n message: `Failed to delete API key: ${errorMessage}`,\n severity: \"error\",\n display: \"transient\",\n });\n } finally {\n setDeleting(null);\n }\n };\n\n const fetchApiKeyFromSecret = async (\n requestNamespace: string,\n requestName: string,\n ) => {\n const key = `${requestNamespace}/${requestName}`;\n if (apiKeyLoading.has(key)) {\n return;\n }\n\n setApiKeyLoading((prev) => new Set(prev).add(key));\n try {\n const response = await fetchApi.fetch(\n `${backendUrl}/api/kuadrant/apikeys/${requestNamespace}/${requestName}/secret`,\n );\n if (response.ok) {\n const data = await response.json();\n setApiKeyValues((prev) => new Map(prev).set(key, data.apiKey));\n // after successful read, mark as already read (show-once behaviour)\n setAlreadyReadKeys((prev) => new Set(prev).add(key));\n } else if (response.status === 403) {\n // secret has already been read\n setAlreadyReadKeys((prev) => new Set(prev).add(key));\n alertApi.post({\n message:\n \"This API key has already been viewed and cannot be retrieved again.\",\n severity: \"warning\",\n display: \"transient\",\n });\n }\n } catch (err) {\n const errorMessage =\n err instanceof Error ? err.message : \"unknown error occurred\";\n alertApi.post({\n message: `Failed to fetch api key: ${errorMessage}`,\n severity: \"error\",\n display: \"transient\",\n });\n } finally {\n setApiKeyLoading((prev) => {\n const next = new Set(prev);\n next.delete(key);\n return next;\n });\n }\n };\n\n const clearApiKeyValue = (requestNamespace: string, requestName: string) => {\n const key = `${requestNamespace}/${requestName}`;\n setApiKeyValues((prev) => {\n const next = new Map(prev);\n next.delete(key);\n return next;\n });\n };\n\n const handleEditRequest = (request: APIKey) => {\n setRequestToEdit(request);\n setEditDialogOpen(true);\n };\n\n const handleEditSuccess = () => {\n setRefresh((r) => r + 1);\n setEditDialogOpen(false);\n alertApi.post({\n message: \"API key updated\",\n severity: \"success\",\n display: \"transient\",\n });\n setRequestToEdit(null);\n };\n\n const handleMenuClose = () => {\n setMenuAnchor(null);\n setMenuRequest(null);\n };\n\n const handleMenuEdit = () => {\n if (!menuRequest) return;\n handleEditRequest(menuRequest);\n handleMenuClose();\n };\n\n const handleMenuDeleteClick = () => {\n if (!menuRequest) return;\n const request = menuRequest;\n handleMenuClose();\n setDeleteDialogState({ open: true, request });\n };\n\n const handleDeleteConfirm = async () => {\n if (!deleteDialogState.request) return;\n await handleDeleteRequest(deleteDialogState.request.metadata.name);\n setDeleteDialogState({ open: false, request: null });\n };\n\n const handleDeleteCancel = () => {\n setDeleteDialogState({ open: false, request: null });\n };\n\n const toggleVisibility = (keyName: string) => {\n setVisibleKeys((prev) => {\n const newSet = new Set(prev);\n if (newSet.has(keyName)) {\n newSet.delete(keyName);\n } else {\n newSet.add(keyName);\n }\n return newSet;\n });\n };\n\n const detailPanelConfig = useMemo(\n () => [\n {\n render: (data: any) => {\n // backstage Table wraps the data in { rowData: actualData }\n const request = data.rowData as APIKey;\n if (!request?.metadata?.name) {\n return <Box />;\n }\n\n // pass already-revealed key from parent state (don't auto-fetch - that consumes show-once)\n const key = `${request.metadata.namespace}/${request.metadata.name}`;\n const revealedKey = apiKeyValues.get(key);\n return (\n <DetailPanelContent\n request={request}\n apiName={apiProductName}\n revealedApiKey={revealedKey}\n />\n );\n },\n },\n ],\n [apiProductName, apiKeyValues],\n );\n\n // separate component to isolate state\n const DetailPanelContent = ({\n request,\n apiName: api,\n revealedApiKey,\n }: {\n request: APIKey;\n apiName: string;\n revealedApiKey?: string;\n }) => {\n const [selectedLanguage, setSelectedLanguage] = useState(0);\n const hostname = request.status?.apiHostname || `${api}.apps.example.com`;\n\n // use revealed key if available, otherwise show placeholder\n const displayApiKey = revealedApiKey || \"<your-api-key>\";\n\n // Generate code snippets based on authScheme credentials\n const credentials = request.status?.authScheme?.credentials;\n const snippets = generateAuthCodeSnippets(credentials, hostname, displayApiKey);\n\n return (\n <Box\n p={3}\n bgcolor=\"background.default\"\n onClick={(e) => e.stopPropagation()}\n >\n {request.spec.useCase && (\n <Box mb={3}>\n <Typography variant=\"h6\" gutterBottom>\n Use Case\n </Typography>\n <Box\n p={2}\n bgcolor=\"background.paper\"\n borderRadius={1}\n border=\"1px solid rgba(0, 0, 0, 0.12)\"\n >\n <Typography\n variant=\"body2\"\n style={{\n whiteSpace: \"pre-wrap\",\n wordBreak: \"break-word\",\n overflowWrap: \"break-word\",\n }}\n >\n {request.spec.useCase}\n </Typography>\n </Box>\n </Box>\n )}\n <Typography variant=\"h6\" gutterBottom>\n Usage Examples\n </Typography>\n <Typography variant=\"body2\" paragraph>\n Use these code examples to test the API with your{\" \"}\n {request.spec.planTier} tier key.\n </Typography>\n <Box onClick={(e) => e.stopPropagation()}>\n <Tabs\n value={selectedLanguage}\n onChange={(e, newValue) => {\n e.stopPropagation();\n setSelectedLanguage(newValue);\n }}\n indicatorColor=\"primary\"\n >\n <Tab label=\"cURL\" onClick={(e) => e.stopPropagation()} />\n <Tab label=\"Node.js\" onClick={(e) => e.stopPropagation()} />\n <Tab label=\"Python\" onClick={(e) => e.stopPropagation()} />\n <Tab label=\"Go\" onClick={(e) => e.stopPropagation()} />\n </Tabs>\n </Box>\n <Box mt={2}>\n {selectedLanguage === 0 && (\n <CodeSnippet\n text={snippets.curl}\n language=\"bash\"\n showCopyCodeButton\n />\n )}\n {selectedLanguage === 1 && (\n <CodeSnippet\n text={snippets.nodejs}\n language=\"javascript\"\n showCopyCodeButton\n />\n )}\n {selectedLanguage === 2 && (\n <CodeSnippet\n text={snippets.python}\n language=\"python\"\n showCopyCodeButton\n />\n )}\n {selectedLanguage === 3 && (\n <CodeSnippet\n text={snippets.go}\n language=\"go\"\n showCopyCodeButton\n />\n )}\n </Box>\n </Box>\n );\n };\n\n const loading =\n requestsLoading ||\n plansLoading ||\n createRequestPermissionLoading ||\n deleteOwnPermissionLoading ||\n deleteAllPermissionLoading ||\n updateRequestPermissionLoading;\n const error = requestsError || plansError;\n const permissionError =\n createRequestPermissionError ||\n deleteOwnPermissionError ||\n deleteAllPermissionError ||\n updateRequestPermissionError;\n\n if (loading) {\n return <Progress />;\n }\n\n if (error) {\n return <ResponseErrorPanel error={error} />;\n }\n\n if (permissionError) {\n const failedPermission = createRequestPermissionError\n ? \"kuadrant.apikey.create\"\n : deleteOwnPermissionError\n ? \"kuadrant.apikey.delete.own\"\n : deleteAllPermissionError\n ? \"kuadrant.apikey.delete.all\"\n : updateRequestPermissionError\n ? \"kuadrant.apikey.update.own\"\n : \"unknown\";\n return (\n <Box p={2}>\n <Typography color=\"error\">\n Unable to check permissions: {permissionError.message}\n </Typography>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Permission: {failedPermission}\n </Typography>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Please try again or contact your administrator\n </Typography>\n </Box>\n );\n }\n\n const myRequests = ((requests || []) as APIKey[]).filter(\n (r) => !optimisticallyDeleted.has(r.metadata.name),\n );\n const plans = (apiProduct?.status?.discoveredPlans || []) as Plan[];\n\n const pendingRequests = myRequests.filter(\n (r) => !r.status?.phase || r.status.phase === \"Pending\",\n );\n const approvedRequests = myRequests.filter(\n (r) => r.status?.phase === \"Approved\",\n );\n const rejectedRequests = myRequests.filter(\n (r) => r.status?.phase === \"Rejected\",\n );\n\n const approvedColumns: TableColumn<APIKey>[] = [\n {\n title: \"Tier\",\n field: \"spec.planTier\",\n render: (row: APIKey) => (\n <Chip label={row.spec.planTier} color=\"primary\" size=\"small\" />\n ),\n },\n {\n title: \"Approved\",\n field: \"status.reviewedAt\",\n render: (row: APIKey) => (\n <Typography variant=\"body2\">\n {row.status?.reviewedAt\n ? new Date(row.status.reviewedAt).toLocaleDateString()\n : \"-\"}\n </Typography>\n ),\n },\n {\n title: \"API Key\",\n field: \"status.secretRef\",\n searchable: false,\n filtering: false,\n render: (row: APIKey) => {\n const key = `${row.metadata.namespace}/${row.metadata.name}`;\n const isVisible = visibleKeys.has(row.metadata.name);\n const isLoading = apiKeyLoading.has(key);\n const apiKeyValue = apiKeyValues.get(key);\n const hasSecretRef = row.status?.secretRef?.name;\n const canReadSecret = row.status?.canReadSecret !== false;\n const isAlreadyRead = alreadyReadKeys.has(key) || !canReadSecret;\n\n if (!hasSecretRef) {\n return (\n <Typography variant=\"body2\" color=\"textSecondary\">\n Awaiting secret...\n </Typography>\n );\n }\n\n // key has already been viewed and cannot be retrieved again\n if (isAlreadyRead && !apiKeyValue) {\n return (\n <Tooltip title=\"This API key has already been viewed and cannot be retrieved again\">\n <Box display=\"flex\" alignItems=\"center\">\n <Typography\n variant=\"body2\"\n color=\"textSecondary\"\n style={{ fontFamily: \"monospace\", marginRight: 8 }}\n >\n Already viewed\n </Typography>\n <VisibilityOffIcon fontSize=\"small\" color=\"disabled\" />\n </Box>\n </Tooltip>\n );\n }\n\n const handleRevealClick = () => {\n if (isVisible) {\n // hiding - clear the value from memory\n clearApiKeyValue(row.metadata.namespace, row.metadata.name);\n toggleVisibility(row.metadata.name);\n } else if (!isAlreadyRead) {\n // show warning dialog before first reveal\n setPendingKeyReveal({\n namespace: row.metadata.namespace,\n name: row.metadata.name,\n });\n setShowOnceWarningOpen(true);\n }\n };\n\n const handleCopy = async () => {\n if (apiKeyValue) {\n await navigator.clipboard.writeText(apiKeyValue);\n alertApi.post({\n message: \"API key copied to clipboard\",\n severity: \"success\",\n display: \"transient\",\n });\n }\n };\n\n return (\n <Box display=\"flex\" alignItems=\"center\">\n <Typography\n variant=\"body2\"\n style={{\n fontFamily: \"monospace\",\n marginRight: 8,\n }}\n >\n {isLoading\n ? \"Loading...\"\n : isVisible && apiKeyValue\n ? apiKeyValue\n : \"••••••••••••••••\"}\n </Typography>\n {isVisible && apiKeyValue && (\n <Tooltip title=\"Copy to clipboard\">\n <IconButton size=\"small\" onClick={handleCopy}>\n <FileCopyIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n )}\n <Tooltip\n title={\n isVisible ? \"Hide API key\" : \"Reveal API key (one-time only)\"\n }\n >\n <span>\n <IconButton\n size=\"small\"\n onClick={handleRevealClick}\n disabled={isLoading || (isAlreadyRead && !apiKeyValue)}\n >\n {isVisible ? <VisibilityOffIcon /> : <VisibilityIcon />}\n </IconButton>\n </span>\n </Tooltip>\n </Box>\n );\n },\n },\n {\n title: \"\",\n field: \"actions\",\n searchable: false,\n filtering: false,\n render: (row: APIKey) => {\n const isDeleting = deleting === row.metadata.name;\n if (isDeleting) {\n return <CircularProgress size={20} />;\n }\n const ownerId = row.spec.requestedBy.userId;\n const canDelete = canDeleteResource(\n ownerId,\n userId,\n canDeleteOwnKey,\n canDeleteAllKeys,\n );\n if (!canDelete) return null;\n return (\n <IconButton\n size=\"small\"\n onClick={(e) => {\n e.stopPropagation();\n const rect = e.currentTarget.getBoundingClientRect();\n setMenuAnchor({ top: rect.bottom, left: rect.left });\n setMenuRequest(row);\n }}\n title=\"Actions\"\n aria-controls={menuAnchor ? \"actions-menu\" : undefined}\n aria-haspopup=\"true\"\n >\n <MoreVertIcon />\n </IconButton>\n );\n },\n },\n ];\n\n const requestColumns: TableColumn<APIKey>[] = [\n {\n title: \"Status\",\n field: \"status.phase\",\n render: (row: APIKey) => {\n const phase = row.status?.phase || \"Pending\";\n const isPending = phase === \"Pending\";\n return (\n <Chip\n label={phase}\n size=\"small\"\n icon={isPending ? <HourglassEmptyIcon /> : <CancelIcon />}\n color={isPending ? \"default\" : \"secondary\"}\n />\n );\n },\n },\n {\n title: \"Tier\",\n field: \"spec.planTier\",\n render: (row: APIKey) => (\n <Chip label={row.spec.planTier} color=\"primary\" size=\"small\" />\n ),\n },\n {\n title: \"Use Case\",\n field: \"spec.useCase\",\n render: (row: APIKey) => {\n if (!row.spec.useCase) {\n return <Typography variant=\"body2\">-</Typography>;\n }\n return (\n <Tooltip title={row.spec.useCase} placement=\"top\">\n <Typography\n variant=\"body2\"\n style={{\n maxWidth: \"200px\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {row.spec.useCase}\n </Typography>\n </Tooltip>\n );\n },\n },\n {\n title: \"Requested\",\n field: \"metadata.creationTimestamp\",\n render: (row: APIKey) => (\n <Typography variant=\"body2\">\n {row.metadata.creationTimestamp\n ? new Date(row.metadata.creationTimestamp).toLocaleDateString()\n : \"-\"}\n </Typography>\n ),\n },\n {\n title: \"Reviewed\",\n field: \"status.reviewedAt\",\n render: (row: APIKey) => {\n if (!row.status?.reviewedAt)\n return <Typography variant=\"body2\">-</Typography>;\n return (\n <Typography variant=\"body2\">\n {new Date(row.status.reviewedAt).toLocaleDateString()}\n </Typography>\n );\n },\n },\n {\n title: \"\",\n field: \"actions\",\n searchable: false,\n filtering: false,\n render: (row: APIKey) => {\n const isDeleting = deleting === row.metadata.name;\n if (isDeleting) {\n return <CircularProgress size={20} />;\n }\n const isPending = !row.status?.phase || row.status.phase === \"Pending\";\n const ownerId = row.spec.requestedBy.userId;\n const canDelete = canDeleteResource(\n ownerId,\n userId,\n canDeleteOwnKey,\n canDeleteAllKeys,\n );\n const canEdit = canUpdateRequest && ownerId === userId;\n if (!isPending || (!canEdit && !canDelete)) return null;\n return (\n <IconButton\n size=\"small\"\n onClick={(e) => {\n e.stopPropagation();\n const rect = e.currentTarget.getBoundingClientRect();\n setMenuAnchor({ top: rect.bottom, left: rect.left });\n setMenuRequest(row);\n }}\n title=\"Actions\"\n aria-controls={menuAnchor ? \"actions-menu\" : undefined}\n aria-haspopup=\"true\"\n >\n <MoreVertIcon />\n </IconButton>\n );\n },\n },\n ];\n\n // Filter columns for pending requests (no Reviewed or Reason)\n const pendingRequestColumns = requestColumns.filter(\n (col) => col.title !== \"Reviewed\" && col.title !== \"Reason\",\n );\n\n return (\n <Box p={2}>\n <Grid container spacing={3} direction=\"column\">\n {canCreateRequest && (\n <Grid item>\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n alignItems=\"flex-end\"\n mb={2}\n >\n <Button\n variant=\"contained\"\n color=\"primary\"\n startIcon={<AddIcon />}\n onClick={() => setRequestDialogOpen(true)}\n disabled={plans.length === 0}\n data-testid=\"request-api-access-button\"\n data-plans-count={plans.length}\n >\n Request API Access\n </Button>\n {plans.length === 0 && (\n <Typography\n variant=\"caption\"\n color=\"textSecondary\"\n style={{ marginTop: 4 }}\n data-testid=\"no-plans-message\"\n >\n {!apiProduct\n ? \"API product not found\"\n : (() => {\n const readyCondition =\n apiProduct.status?.conditions?.find(\n (c: any) => c.type === \"Ready\",\n );\n const planCondition =\n apiProduct.status?.conditions?.find(\n (c: any) => c.type === \"PlanPolicyDiscovered\",\n );\n\n if (readyCondition?.status !== \"True\") {\n return `HTTPRoute not ready: ${readyCondition?.message || \"unknown\"}`;\n }\n if (planCondition?.status !== \"True\") {\n return `No plans discovered: ${planCondition?.message || \"no PlanPolicy found\"}`;\n }\n return \"No plans available\";\n })()}\n </Typography>\n )}\n </Box>\n </Grid>\n )}\n {pendingRequests.length === 0 &&\n rejectedRequests.length === 0 &&\n approvedRequests.length === 0 && (\n <Grid item>\n <Box p={3} textAlign=\"center\">\n <Typography variant=\"body1\" color=\"textSecondary\">\n No API keys yet. Request access to get started.\n </Typography>\n </Box>\n </Grid>\n )}\n {pendingRequests.length > 0 && (\n <Grid item>\n <Table\n title=\"Pending Requests\"\n options={{\n paging: pendingRequests.length > 5,\n pageSize: 20,\n search: true,\n filtering: true,\n debounceInterval: 300,\n toolbar: true,\n emptyRowsWhenPaging: false,\n }}\n columns={pendingRequestColumns}\n data={pendingRequests}\n />\n </Grid>\n )}\n {rejectedRequests.length > 0 && (\n <Grid item>\n <Table\n title=\"Rejected Requests\"\n options={{\n paging: rejectedRequests.length > 5,\n pageSize: 20,\n search: true,\n filtering: true,\n debounceInterval: 300,\n toolbar: true,\n emptyRowsWhenPaging: false,\n }}\n columns={requestColumns}\n data={rejectedRequests}\n />\n </Grid>\n )}\n {approvedRequests.length > 0 && (\n <Grid item>\n <Table\n key=\"api-keys-table\"\n title=\"API Keys\"\n options={{\n paging: approvedRequests.length > 5,\n pageSize: 20,\n search: true,\n filtering: true,\n debounceInterval: 300,\n toolbar: true,\n emptyRowsWhenPaging: false,\n }}\n columns={approvedColumns}\n data={approvedRequests}\n detailPanel={detailPanelConfig}\n />\n </Grid>\n )}\n </Grid>\n\n <RequestAccessDialog\n open={requestDialogOpen}\n onClose={() => setRequestDialogOpen(false)}\n onSuccess={() => {\n setRequestDialogOpen(false);\n setRefresh((r) => r + 1);\n }}\n apiProductName={apiProductName}\n namespace={namespace}\n userEmail={userEmail}\n plans={plans}\n />\n\n <Menu\n id=\"actions-menu\"\n open={Boolean(menuAnchor)}\n onClose={handleMenuClose}\n anchorReference=\"anchorPosition\"\n anchorPosition={menuAnchor || { top: 0, left: 0 }}\n >\n {menuRequest &&\n (() => {\n const isPending =\n !menuRequest.status?.phase ||\n menuRequest.status.phase === \"Pending\";\n const ownerId = menuRequest.spec.requestedBy.userId;\n const canEdit = canUpdateRequest && ownerId === userId && isPending;\n\n const items = [];\n if (canEdit) {\n items.push(\n <MenuItem key=\"edit\" onClick={handleMenuEdit}>\n Edit\n </MenuItem>,\n );\n }\n items.push(\n <MenuItem key=\"delete\" onClick={handleMenuDeleteClick}>\n Delete\n </MenuItem>,\n );\n return items;\n })()}\n </Menu>\n\n {requestToEdit && (\n <EditAPIKeyDialog\n open={editDialogOpen}\n onClose={() => {\n setEditDialogOpen(false);\n setRequestToEdit(null);\n }}\n onSuccess={handleEditSuccess}\n request={requestToEdit}\n availablePlans={plans}\n />\n )}\n\n <ConfirmDeleteDialog\n open={deleteDialogState.open}\n title=\"Delete Request\"\n description={`Are you sure you want to delete this ${deleteDialogState.request?.status?.phase === \"Approved\" ? \"API key\" : \"request\"}?`}\n deleting={deleting !== null}\n onConfirm={handleDeleteConfirm}\n onCancel={handleDeleteCancel}\n />\n\n <Dialog\n open={showOnceWarningOpen}\n onClose={() => {\n setShowOnceWarningOpen(false);\n setPendingKeyReveal(null);\n }}\n maxWidth=\"sm\"\n >\n <DialogTitle>\n <Box display=\"flex\" alignItems=\"center\">\n <WarningIcon color=\"primary\" style={{ marginRight: 8 }} />\n View API Key\n </Box>\n </DialogTitle>\n <DialogContent>\n <Typography variant=\"body1\" paragraph>\n This API key can only be viewed <strong>once</strong>. After you\n reveal it, you will not be able to retrieve it again.\n </Typography>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Make sure to copy and store it securely before closing this view.\n </Typography>\n </DialogContent>\n <DialogActions>\n <Button\n onClick={() => {\n setShowOnceWarningOpen(false);\n setPendingKeyReveal(null);\n }}\n >\n Cancel\n </Button>\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={() => {\n if (pendingKeyReveal) {\n fetchApiKeyFromSecret(\n pendingKeyReveal.namespace,\n pendingKeyReveal.name,\n );\n toggleVisibility(pendingKeyReveal.name);\n }\n setShowOnceWarningOpen(false);\n setPendingKeyReveal(null);\n }}\n >\n Reveal API Key\n </Button>\n </DialogActions>\n </Dialog>\n </Box>\n );\n};\n","import { jsx } from 'react/jsx-runtime';\nimport { stringifyEntityRef } from '@backstage/catalog-model';\nimport { AnalyticsContext } from '@backstage/core-plugin-api';\nimport { createVersionedContext, useVersionedContext, createVersionedValueMap } from '@backstage/version-bridge';\n\nconst NewEntityContext = createVersionedContext(\n \"entity-context\"\n);\nconst AsyncEntityProvider = (props) => {\n const { children, entity, loading, error, refresh } = props;\n const value = { entity, loading, error, refresh };\n return /* @__PURE__ */ jsx(NewEntityContext.Provider, { value: createVersionedValueMap({ 1: value }), children: /* @__PURE__ */ jsx(\n AnalyticsContext,\n {\n attributes: {\n ...entity ? { entityRef: stringifyEntityRef(entity) } : void 0\n },\n children\n }\n ) });\n};\nconst EntityProvider = (props) => /* @__PURE__ */ jsx(\n AsyncEntityProvider,\n {\n entity: props.entity,\n loading: !Boolean(props.entity),\n error: void 0,\n refresh: void 0,\n children: props.children\n }\n);\nfunction useEntity() {\n const versionedHolder = useVersionedContext(\n \"entity-context\"\n );\n if (!versionedHolder) {\n throw new Error(\"Entity context is not available\");\n }\n const value = versionedHolder.atVersion(1);\n if (!value) {\n throw new Error(\"EntityContext v1 not available\");\n }\n if (!value.entity) {\n throw new Error(\n \"useEntity hook is being called outside of an EntityLayout where the entity has not been loaded. If this is intentional, please use useAsyncEntity instead.\"\n );\n }\n return { entity: value.entity };\n}\nfunction useAsyncEntity() {\n const versionedHolder = useVersionedContext(\n \"entity-context\"\n );\n if (!versionedHolder) {\n throw new Error(\"Entity context is not available\");\n }\n const value = versionedHolder.atVersion(1);\n if (!value) {\n throw new Error(\"EntityContext v1 not available\");\n }\n const { entity, loading, error, refresh } = value;\n return { entity, loading, error, refresh };\n}\n\nexport { AsyncEntityProvider, EntityProvider, useAsyncEntity, useEntity };\n//# sourceMappingURL=useEntity.esm.js.map\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z\"\n}), 'Info');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\"\n}), 'MoreVert');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z\"\n}), 'Warning');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6 2v6h.01L6 8.01 10 12l-4 4 .01.01H6V22h12v-5.99h-.01L18 16l-4-4 4-3.99-.01-.01H18V2H6zm10 14.5V20H8v-3.5l4-4 4 4zm-4-5l-4-4V4h8v3.5l-4 4z\"\n}), 'HourglassEmpty');\n\nexports.default = _default;"],"names":["RequestAccessDialog","open","onClose","onSuccess","apiProductName","namespace","userEmail","plans","config","useApi","configApiRef","fetchApi","fetchApiRef","alertApi","alertApiRef","backendUrl","getString","selectedPlan","setSelectedPlan","useState","useCase","setUseCase","creating","setCreating","createError","setCreateError","handleClose","Dialog","maxWidth","fullWidth","DialogTitle","DialogContent","Box","mb","p","bgcolor","borderRadius","display","alignItems","style","gap","InfoIcon","color","fontSize","marginTop","Typography","variant","FormControl","margin","disabled","data-testid","InputLabel","id","Select","labelId","value","onChange","e","target","map","plan","limitDesc","Object","entries","limits","key","val","join","MenuItem","tier","TextField","label","placeholder","multiline","rows","helperText","DialogActions","Button","onClick","async","response","fetch","method","headers","body","JSON","stringify","planTier","trim","ok","errorData","json","catch","Error","error","status","post","message","severity","err","errorMessage","startIcon","CircularProgress","size","undefined","_interopRequireDefault","_interopRequireWildcard","exports","React","_default","default","createElement","d","generateAuthorizationHeaderSnippets","baseUrl","apiKey","prefix","prefixWithSpace","curl","nodejs","python","go","ApiKeyManagementTab","propNamespace","entity","apiProduct","deleteDialogState","useEntity","identityApi","identityApiRef","visibleKeys","setVisibleKeys","Set","refresh","setRefresh","userId","setUserId","setUserEmail","requestDialogOpen","setRequestDialogOpen","editDialogOpen","setEditDialogOpen","requestToEdit","setRequestToEdit","menuAnchor","setMenuAnchor","menuRequest","setMenuRequest","deleting","setDeleting","optimisticallyDeleted","setOptimisticallyDeleted","setDeleteDialogState","request","apiKeyValues","setApiKeyValues","Map","apiKeyLoading","setApiKeyLoading","alreadyReadKeys","setAlreadyReadKeys","showOnceWarningOpen","setShowOnceWarningOpen","pendingKeyReveal","setPendingKeyReveal","metadata","annotations","name","useAsync","identity","getBackstageIdentity","profile","getProfileInfo","userEntityRef","email","requests","loading","requestsLoading","requestsError","items","filter","r","spec","apiProductRef","plansLoading","plansError","data","find","resourceRef","allowed","canCreateRequest","createRequestPermissionLoading","createRequestPermissionError","useKuadrantPermission","kuadrantApiKeyCreatePermission","canDeleteOwnKey","deleteOwnPermissionLoading","deleteOwnPermissionError","kuadrantApiKeyDeleteOwnPermission","canDeleteAllKeys","deleteAllPermissionLoading","deleteAllPermissionError","kuadrantApiKeyDeleteAllPermission","canUpdateRequest","updateRequestPermissionLoading","updateRequestPermissionError","kuadrantApiKeyUpdateOwnPermission","handleMenuClose","handleMenuEdit","handleMenuDeleteClick","toggleVisibility","keyName","prev","newSet","has","delete","add","detailPanelConfig","useMemo","render","rowData","revealedKey","get","DetailPanelContent","apiName","revealedApiKey","api","selectedLanguage","setSelectedLanguage","hostname","apiHostname","displayApiKey","snippets","credentials","authorizationHeader","customHeader","headerName","generateCustomHeaderSnippets","queryString","paramName","generateQueryStringSnippets","cookie","cookieName","generateCookieSnippets","generateAuthCodeSnippets","authScheme","stopPropagation","gutterBottom","border","whiteSpace","wordBreak","overflowWrap","paragraph","Tabs","newValue","indicatorColor","Tab","mt","CodeSnippet","text","language","showCopyCodeButton","permissionError","Progress","ResponseErrorPanel","failedPermission","myRequests","discoveredPlans","pendingRequests","phase","approvedRequests","rejectedRequests","approvedColumns","title","field","row","Chip","reviewedAt","Date","toLocaleDateString","searchable","filtering","isVisible","isLoading","apiKeyValue","hasSecretRef","secretRef","canReadSecret","isAlreadyRead","Tooltip","fontFamily","marginRight","VisibilityOffIcon","IconButton","navigator","clipboard","writeText","FileCopyIcon","span","requestNamespace","requestName","next","clearApiKeyValue","VisibilityIcon","ownerId","requestedBy","canDeleteResource","rect","currentTarget","getBoundingClientRect","top","bottom","left","aria-controls","aria-haspopup","MoreVertIcon","requestColumns","isPending","icon","HourglassEmptyIcon","CancelIcon","placement","overflow","textOverflow","creationTimestamp","canDelete","pendingRequestColumns","col","Grid","container","spacing","direction","item","flexDirection","AddIcon","length","data-plans-count","readyCondition","conditions","c","type","planCondition","textAlign","Table","options","paging","pageSize","search","debounceInterval","toolbar","emptyRowsWhenPaging","columns","detailPanel","Menu","Boolean","anchorReference","anchorPosition","push","EditAPIKeyDialog","availablePlans","ConfirmDeleteDialog","description","onConfirm","handleDeleteRequest","onCancel","WarningIcon","strong","set","fetchApiKeyFromSecret","versionedHolder","useVersionedContext","atVersion","createVersionedContext"],"sourceRoot":""}
@@ -0,0 +1,3 @@
1
+ /*! For license information please see 3657.882640ca.chunk.js.LICENSE.txt */
2
+ "use strict";(self.webpackChunkinternal_plugin_kuadrant=self.webpackChunkinternal_plugin_kuadrant||[]).push([[3657,6038],{16558:(e,r,t)=>{t.d(r,{i:()=>i,s:()=>a});var n=t(95478),o=!!n.useInsertionEffect&&n.useInsertionEffect,a=o||function(e){return e()},i=o||n.useLayoutEffect},26685:(e,r)=>{var t="function"==typeof Symbol&&Symbol.for,n=t?Symbol.for("react.element"):60103,o=t?Symbol.for("react.portal"):60106,a=t?Symbol.for("react.fragment"):60107,i=t?Symbol.for("react.strict_mode"):60108,s=t?Symbol.for("react.profiler"):60114,c=t?Symbol.for("react.provider"):60109,u=t?Symbol.for("react.context"):60110,l=t?Symbol.for("react.async_mode"):60111,f=t?Symbol.for("react.concurrent_mode"):60111,m=t?Symbol.for("react.forward_ref"):60112,y=t?Symbol.for("react.suspense"):60113,d=t?Symbol.for("react.suspense_list"):60120,p=t?Symbol.for("react.memo"):60115,v=t?Symbol.for("react.lazy"):60116,h=t?Symbol.for("react.block"):60121,g=t?Symbol.for("react.fundamental"):60117,b=t?Symbol.for("react.responder"):60118,S=t?Symbol.for("react.scope"):60119;function x(e){if("object"==typeof e&&null!==e){var r=e.$$typeof;switch(r){case n:switch(e=e.type){case l:case f:case a:case s:case i:case y:return e;default:switch(e=e&&e.$$typeof){case u:case m:case v:case p:case c:return e;default:return r}}case o:return r}}}function C(e){return x(e)===f}r.AsyncMode=l,r.ConcurrentMode=f,r.ContextConsumer=u,r.ContextProvider=c,r.Element=n,r.ForwardRef=m,r.Fragment=a,r.Lazy=v,r.Memo=p,r.Portal=o,r.Profiler=s,r.StrictMode=i,r.Suspense=y,r.isAsyncMode=function(e){return C(e)||x(e)===l},r.isConcurrentMode=C,r.isContextConsumer=function(e){return x(e)===u},r.isContextProvider=function(e){return x(e)===c},r.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===n},r.isForwardRef=function(e){return x(e)===m},r.isFragment=function(e){return x(e)===a},r.isLazy=function(e){return x(e)===v},r.isMemo=function(e){return x(e)===p},r.isPortal=function(e){return x(e)===o},r.isProfiler=function(e){return x(e)===s},r.isStrictMode=function(e){return x(e)===i},r.isSuspense=function(e){return x(e)===y},r.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===a||e===f||e===s||e===i||e===y||e===d||"object"==typeof e&&null!==e&&(e.$$typeof===v||e.$$typeof===p||e.$$typeof===c||e.$$typeof===u||e.$$typeof===m||e.$$typeof===g||e.$$typeof===b||e.$$typeof===S||e.$$typeof===h)},r.typeOf=x},34556:(e,r,t)=>{function n(e){var r=Object.create(null);return function(t){return void 0===r[t]&&(r[t]=e(t)),r[t]}}t.d(r,{A:()=>n})},53657:(e,r,t)=>{t.r(r),t.d(r,{CacheProvider:()=>p,ClassNames:()=>R,Global:()=>P,ThemeContext:()=>g,ThemeProvider:()=>x,__unsafe_useEmotionCache:()=>v,createElement:()=>A,css:()=>N,jsx:()=>A,keyframes:()=>T,useTheme:()=>b,withEmotionCache:()=>h,withTheme:()=>C});var n=t(95478),o=t(76322),a=t.n(o),i=t(89575),s=function(e){var r=new WeakMap;return function(t){if(r.has(t))return r.get(t);var n=e(t);return r.set(t,n),n}},c=t(75985),u=t.n(c),l=function(e,r){return u()(e,r)},f=t(85780),m=t(85557),y=t(16558),d=n.createContext("undefined"!=typeof HTMLElement?a()({key:"css"}):null),p=d.Provider,v=function(){return(0,n.useContext)(d)},h=function(e){return(0,n.forwardRef)(function(r,t){var o=(0,n.useContext)(d);return e(r,o,t)})},g=n.createContext({}),b=function(){return n.useContext(g)},S=s(function(e){return s(function(r){return function(e,r){return"function"==typeof r?r(e):(0,i.A)({},e,r)}(e,r)})}),x=function(e){var r=n.useContext(g);return e.theme!==r&&(r=S(r)(e.theme)),n.createElement(g.Provider,{value:r},e.children)};function C(e){var r=e.displayName||e.name||"Component",t=n.forwardRef(function(r,t){var o=n.useContext(g);return n.createElement(e,(0,i.A)({theme:o,ref:t},r))});return t.displayName="WithTheme("+r+")",l(t,e)}var w,E,_={}.hasOwnProperty,O="__EMOTION_TYPE_PLEASE_DO_NOT_USE__",k=function(e){var r=e.cache,t=e.serialized,n=e.isStringTag;return(0,f.SF)(r,t,n),(0,y.s)(function(){return(0,f.sk)(r,t,n)}),null},$=h(function(e,r,t){var o=e.css;"string"==typeof o&&void 0!==r.registered[o]&&(o=r.registered[o]);var a=e[O],i=[o],s="";"string"==typeof e.className?s=(0,f.Rk)(r.registered,i,e.className):null!=e.className&&(s=e.className+" ");var c=(0,m.J)(i,void 0,n.useContext(g));s+=r.key+"-"+c.name;var u={};for(var l in e)_.call(e,l)&&"css"!==l&&l!==O&&(u[l]=e[l]);return u.className=s,t&&(u.ref=t),n.createElement(n.Fragment,null,n.createElement(k,{cache:r,serialized:c,isStringTag:"string"==typeof a}),n.createElement(a,u))}),A=function(e,r){var t=arguments;if(null==r||!_.call(r,"css"))return n.createElement.apply(void 0,t);var o=t.length,a=new Array(o);a[0]=$,a[1]=function(e,r){var t={};for(var n in r)_.call(r,n)&&(t[n]=r[n]);return t[O]=e,t}(e,r);for(var i=2;i<o;i++)a[i]=t[i];return n.createElement.apply(null,a)};w=A||(A={}),E||(E=w.JSX||(w.JSX={}));var P=h(function(e,r){var t=e.styles,o=(0,m.J)([t],void 0,n.useContext(g)),a=n.useRef();return(0,y.i)(function(){var e=r.key+"-global",t=new r.sheet.constructor({key:e,nonce:r.sheet.nonce,container:r.sheet.container,speedy:r.sheet.isSpeedy}),n=!1,i=document.querySelector('style[data-emotion="'+e+" "+o.name+'"]');return r.sheet.tags.length&&(t.before=r.sheet.tags[0]),null!==i&&(n=!0,i.setAttribute("data-emotion",e),t.hydrate([i])),a.current=[t,n],function(){t.flush()}},[r]),(0,y.i)(function(){var e=a.current,t=e[0];if(e[1])e[1]=!1;else{if(void 0!==o.next&&(0,f.sk)(r,o.next,!0),t.tags.length){var n=t.tags[t.tags.length-1].nextElementSibling;t.before=n,t.flush()}r.insert("",o,t,!1)}},[r,o.name]),null});function N(){for(var e=arguments.length,r=new Array(e),t=0;t<e;t++)r[t]=arguments[t];return(0,m.J)(r)}function T(){var e=N.apply(void 0,arguments),r="animation-"+e.name;return{name:r,styles:"@keyframes "+r+"{"+e.styles+"}",anim:1,toString:function(){return"_EMO_"+this.name+"_"+this.styles+"_EMO_"}}}var M=function e(r){for(var t=r.length,n=0,o="";n<t;n++){var a=r[n];if(null!=a){var i=void 0;switch(typeof a){case"boolean":break;case"object":if(Array.isArray(a))i=e(a);else for(var s in i="",a)a[s]&&s&&(i&&(i+=" "),i+=s);break;default:i=a}i&&(o&&(o+=" "),o+=i)}}return o},j=function(e){var r=e.cache,t=e.serializedArr;return(0,y.s)(function(){for(var e=0;e<t.length;e++)(0,f.sk)(r,t[e],!1)}),null},R=h(function(e,r){var t=[],o=function(){for(var e=arguments.length,n=new Array(e),o=0;o<e;o++)n[o]=arguments[o];var a=(0,m.J)(n,r.registered);return t.push(a),(0,f.SF)(r,a,!1),r.key+"-"+a.name},a={css:o,cx:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return function(e,r,t){var n=[],o=(0,f.Rk)(e,n,t);return n.length<2?t:o+r(n)}(r.registered,o,M(t))},theme:n.useContext(g)},i=e.children(a);return n.createElement(n.Fragment,null,n.createElement(j,{cache:r,serializedArr:t}),i)})},65521:(e,r,t)=>{e.exports=t(26685)},75985:(e,r,t)=>{var n=t(65521),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function c(e){return n.isMemo(e)?i:s[e.$$typeof]||o}s[n.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[n.Memo]=i;var u=Object.defineProperty,l=Object.getOwnPropertyNames,f=Object.getOwnPropertySymbols,m=Object.getOwnPropertyDescriptor,y=Object.getPrototypeOf,d=Object.prototype;e.exports=function e(r,t,n){if("string"!=typeof t){if(d){var o=y(t);o&&o!==d&&e(r,o,n)}var i=l(t);f&&(i=i.concat(f(t)));for(var s=c(r),p=c(t),v=0;v<i.length;++v){var h=i[v];if(!(a[h]||n&&n[h]||p&&p[h]||s&&s[h])){var g=m(t,h);try{u(r,h,g)}catch(e){}}}}return r}},85557:(e,r,t)=>{t.d(r,{J:()=>v});var n={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,scale:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1},o=t(34556),a=!1,i=/[A-Z]|^ms/g,s=/_EMO_([^_]+?)_([^]*?)_EMO_/g,c=function(e){return 45===e.charCodeAt(1)},u=function(e){return null!=e&&"boolean"!=typeof e},l=(0,o.A)(function(e){return c(e)?e:e.replace(i,"-$&").toLowerCase()}),f=function(e,r){switch(e){case"animation":case"animationName":if("string"==typeof r)return r.replace(s,function(e,r,t){return d={name:r,styles:t,next:d},r})}return 1===n[e]||c(e)||"number"!=typeof r||0===r?r:r+"px"},m="Component selectors can only be used in conjunction with @emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware compiler transform.";function y(e,r,t){if(null==t)return"";var n=t;if(void 0!==n.__emotion_styles)return n;switch(typeof t){case"boolean":return"";case"object":var o=t;if(1===o.anim)return d={name:o.name,styles:o.styles,next:d},o.name;var i=t;if(void 0!==i.styles){var s=i.next;if(void 0!==s)for(;void 0!==s;)d={name:s.name,styles:s.styles,next:d},s=s.next;return i.styles+";"}return function(e,r,t){var n="";if(Array.isArray(t))for(var o=0;o<t.length;o++)n+=y(e,r,t[o])+";";else for(var i in t){var s=t[i];if("object"!=typeof s){var c=s;null!=r&&void 0!==r[c]?n+=i+"{"+r[c]+"}":u(c)&&(n+=l(i)+":"+f(i,c)+";")}else{if("NO_COMPONENT_SELECTOR"===i&&a)throw new Error(m);if(!Array.isArray(s)||"string"!=typeof s[0]||null!=r&&void 0!==r[s[0]]){var d=y(e,r,s);switch(i){case"animation":case"animationName":n+=l(i)+":"+d+";";break;default:n+=i+"{"+d+"}"}}else for(var p=0;p<s.length;p++)u(s[p])&&(n+=l(i)+":"+f(i,s[p])+";")}}return n}(e,r,t);case"function":if(void 0!==e){var c=d,p=t(e);return d=c,y(e,r,p)}}var v=t;if(null==r)return v;var h=r[v];return void 0!==h?h:v}var d,p=/label:\s*([^\s;{]+)\s*(;|$)/g;function v(e,r,t){if(1===e.length&&"object"==typeof e[0]&&null!==e[0]&&void 0!==e[0].styles)return e[0];var n=!0,o="";d=void 0;var a=e[0];null==a||void 0===a.raw?(n=!1,o+=y(t,r,a)):o+=a[0];for(var i=1;i<e.length;i++)o+=y(t,r,e[i]),n&&(o+=a[i]);p.lastIndex=0;for(var s,c="";null!==(s=p.exec(o));)c+="-"+s[1];var u=function(e){for(var r,t=0,n=0,o=e.length;o>=4;++n,o-=4)r=1540483477*(65535&(r=255&e.charCodeAt(n)|(255&e.charCodeAt(++n))<<8|(255&e.charCodeAt(++n))<<16|(255&e.charCodeAt(++n))<<24))+(59797*(r>>>16)<<16),t=1540483477*(65535&(r^=r>>>24))+(59797*(r>>>16)<<16)^1540483477*(65535&t)+(59797*(t>>>16)<<16);switch(o){case 3:t^=(255&e.charCodeAt(n+2))<<16;case 2:t^=(255&e.charCodeAt(n+1))<<8;case 1:t=1540483477*(65535&(t^=255&e.charCodeAt(n)))+(59797*(t>>>16)<<16)}return(((t=1540483477*(65535&(t^=t>>>13))+(59797*(t>>>16)<<16))^t>>>15)>>>0).toString(36)}(o)+c;return{name:u,styles:o,next:d}}},85780:(e,r,t)=>{function n(e,r,t){var n="";return t.split(" ").forEach(function(t){void 0!==e[t]?r.push(e[t]+";"):t&&(n+=t+" ")}),n}t.d(r,{Rk:()=>n,SF:()=>o,sk:()=>a});var o=function(e,r,t){var n=e.key+"-"+r.name;!1===t&&void 0===e.registered[n]&&(e.registered[n]=r.styles)},a=function(e,r,t){o(e,r,t);var n=e.key+"-"+r.name;if(void 0===e.inserted[r.name]){var a=r;do{e.insert(r===a?"."+n:"",a,e.sheet,!0),a=a.next}while(void 0!==a)}}},89575:(e,r,t)=>{function n(){return n=Object.assign?Object.assign.bind():function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var n in t)({}).hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e},n.apply(null,arguments)}t.d(r,{A:()=>n})}}]);
3
+ //# sourceMappingURL=3657.882640ca.chunk.js.map
@@ -0,0 +1,8 @@
1
+ /** @license React v16.13.1
2
+ * react-is.production.min.js
3
+ *
4
+ * Copyright (c) Facebook, Inc. and its affiliates.
5
+ *
6
+ * This source code is licensed under the MIT license found in the
7
+ * LICENSE file in the root directory of this source tree.
8
+ */
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static/3657.882640ca.chunk.js","mappings":";kLAMIA,IAAqB,EAA+B,oBAAI,EAA+B,mBACvFC,EAA2CD,GAL5B,SAAsBE,GACvC,OAAOA,GACT,EAIIC,EAAuCH,GAAsB,iB,gBCCpD,IAAII,EAAE,mBAAoBC,QAAQA,OAAOC,IAAIC,EAAEH,EAAEC,OAAOC,IAAI,iBAAiB,MAAME,EAAEJ,EAAEC,OAAOC,IAAI,gBAAgB,MAAMG,EAAEL,EAAEC,OAAOC,IAAI,kBAAkB,MAAMI,EAAEN,EAAEC,OAAOC,IAAI,qBAAqB,MAAMK,EAAEP,EAAEC,OAAOC,IAAI,kBAAkB,MAAMM,EAAER,EAAEC,OAAOC,IAAI,kBAAkB,MAAMO,EAAET,EAAEC,OAAOC,IAAI,iBAAiB,MAAMQ,EAAEV,EAAEC,OAAOC,IAAI,oBAAoB,MAAMS,EAAEX,EAAEC,OAAOC,IAAI,yBAAyB,MAAMU,EAAEZ,EAAEC,OAAOC,IAAI,qBAAqB,MAAMW,EAAEb,EAAEC,OAAOC,IAAI,kBAAkB,MAAMY,EAAEd,EACpfC,OAAOC,IAAI,uBAAuB,MAAMa,EAAEf,EAAEC,OAAOC,IAAI,cAAc,MAAMc,EAAEhB,EAAEC,OAAOC,IAAI,cAAc,MAAMe,EAAEjB,EAAEC,OAAOC,IAAI,eAAe,MAAMgB,EAAElB,EAAEC,OAAOC,IAAI,qBAAqB,MAAMiB,EAAEnB,EAAEC,OAAOC,IAAI,mBAAmB,MAAMkB,EAAEpB,EAAEC,OAAOC,IAAI,eAAe,MAClQ,SAASmB,EAAEC,GAAG,GAAG,iBAAkBA,GAAG,OAAOA,EAAE,CAAC,IAAIC,EAAED,EAAEE,SAAS,OAAOD,GAAG,KAAKpB,EAAE,OAAOmB,EAAEA,EAAEG,MAAQ,KAAKf,EAAE,KAAKC,EAAE,KAAKN,EAAE,KAAKE,EAAE,KAAKD,EAAE,KAAKO,EAAE,OAAOS,EAAE,QAAQ,OAAOA,EAAEA,GAAGA,EAAEE,UAAY,KAAKf,EAAE,KAAKG,EAAE,KAAKI,EAAE,KAAKD,EAAE,KAAKP,EAAE,OAAOc,EAAE,QAAQ,OAAOC,GAAG,KAAKnB,EAAE,OAAOmB,EAAE,CAAC,CAAC,SAASG,EAAEJ,GAAG,OAAOD,EAAEC,KAAKX,CAAC,CAACgB,EAAQC,UAAUlB,EAAEiB,EAAQE,eAAelB,EAAEgB,EAAQG,gBAAgBrB,EAAEkB,EAAQI,gBAAgBvB,EAAEmB,EAAQK,QAAQ7B,EAAEwB,EAAQM,WAAWrB,EAAEe,EAAQO,SAAS7B,EAAEsB,EAAQQ,KAAKnB,EAAEW,EAAQS,KAAKrB,EAAEY,EAAQU,OAAOjC,EAChfuB,EAAQW,SAAS/B,EAAEoB,EAAQY,WAAWjC,EAAEqB,EAAQa,SAAS3B,EAAEc,EAAQc,YAAY,SAASnB,GAAG,OAAOI,EAAEJ,IAAID,EAAEC,KAAKZ,CAAC,EAAEiB,EAAQe,iBAAiBhB,EAAEC,EAAQgB,kBAAkB,SAASrB,GAAG,OAAOD,EAAEC,KAAKb,CAAC,EAAEkB,EAAQiB,kBAAkB,SAAStB,GAAG,OAAOD,EAAEC,KAAKd,CAAC,EAAEmB,EAAQkB,UAAU,SAASvB,GAAG,MAAM,iBAAkBA,GAAG,OAAOA,GAAGA,EAAEE,WAAWrB,CAAC,EAAEwB,EAAQmB,aAAa,SAASxB,GAAG,OAAOD,EAAEC,KAAKV,CAAC,EAAEe,EAAQoB,WAAW,SAASzB,GAAG,OAAOD,EAAEC,KAAKjB,CAAC,EAAEsB,EAAQqB,OAAO,SAAS1B,GAAG,OAAOD,EAAEC,KAAKN,CAAC,EAC1dW,EAAQsB,OAAO,SAAS3B,GAAG,OAAOD,EAAEC,KAAKP,CAAC,EAAEY,EAAQuB,SAAS,SAAS5B,GAAG,OAAOD,EAAEC,KAAKlB,CAAC,EAAEuB,EAAQwB,WAAW,SAAS7B,GAAG,OAAOD,EAAEC,KAAKf,CAAC,EAAEoB,EAAQyB,aAAa,SAAS9B,GAAG,OAAOD,EAAEC,KAAKhB,CAAC,EAAEqB,EAAQ0B,WAAW,SAAS/B,GAAG,OAAOD,EAAEC,KAAKT,CAAC,EAC1Oc,EAAQ2B,mBAAmB,SAAShC,GAAG,MAAM,iBAAkBA,GAAG,mBAAoBA,GAAGA,IAAIjB,GAAGiB,IAAIX,GAAGW,IAAIf,GAAGe,IAAIhB,GAAGgB,IAAIT,GAAGS,IAAIR,GAAG,iBAAkBQ,GAAG,OAAOA,IAAIA,EAAEE,WAAWR,GAAGM,EAAEE,WAAWT,GAAGO,EAAEE,WAAWhB,GAAGc,EAAEE,WAAWf,GAAGa,EAAEE,WAAWZ,GAAGU,EAAEE,WAAWN,GAAGI,EAAEE,WAAWL,GAAGG,EAAEE,WAAWJ,GAAGE,EAAEE,WAAWP,EAAE,EAAEU,EAAQ4B,OAAOlC,C,kBCdnU,SAASmC,EAAQC,GACf,IAAIC,EAAQC,OAAO7D,OAAO,MAC1B,OAAO,SAAU8D,GAEf,YADmBC,IAAfH,EAAME,KAAoBF,EAAME,GAAOH,EAAGG,IACvCF,EAAME,EACf,CACF,C,sUCNIE,EAAc,SAAqBC,GACrC,IAAIL,EAAQ,IAAIM,QAChB,OAAO,SAAUJ,GACf,GAAIF,EAAMO,IAAIL,GAGZ,OAAOF,EAAMQ,IAAIN,GAGnB,IAAIO,EAAMJ,EAAKH,GAEf,OADAF,EAAMU,IAAIR,EAAKO,GACRA,CACT,CACF,E,oBCPIE,EAAuB,SAAWC,EAAiBC,GACrD,OAAO,IAAuBD,EAAiBC,EAChD,E,iCCIGC,EAAqC,gBAMlB,oBAAhBC,YAA6C,IAAY,CAC9DC,IAAK,QACF,MAEDC,EAAgBH,EAAoBI,SACpCC,EAA2B,WAC7B,OAAO,IAAAC,YAAWN,EACpB,EAEIO,EAAmB,SAA0BhB,GAC/C,OAAoB,IAAAiB,YAAW,SAAUC,EAAOC,GAE9C,IAAIxB,GAAQ,IAAAoB,YAAWN,GACvB,OAAOT,EAAKkB,EAAOvB,EAAOwB,EAC5B,EACF,EAEIC,EAA8B,gBAAoB,CAAC,GAEnDC,EAAW,WACb,OAAO,aAAiBD,EAC1B,EAYIE,EAAsCvB,EAAY,SAAUwB,GAC9D,OAAOxB,EAAY,SAAUyB,GAC3B,OAZW,SAAkBD,EAAYC,GAC3C,MAAqB,mBAAVA,EACSA,EAAMD,IAKnB,OAAS,CAAC,EAAGA,EAAYC,EAClC,CAIWC,CAASF,EAAYC,EAC9B,EACF,GACIE,EAAgB,SAAuBR,GACzC,IAAIM,EAAQ,aAAiBJ,GAM7B,OAJIF,EAAMM,QAAUA,IAClBA,EAAQF,EAAqBE,EAArBF,CAA4BJ,EAAMM,QAGxB,gBAAoBJ,EAAaP,SAAU,CAC7Dc,MAAOH,GACNN,EAAMU,SACX,EACA,SAASC,EAAUC,GACjB,IAAIC,EAAgBD,EAAUE,aAAeF,EAAUG,MAAQ,YAC3DC,EAAyB,aAAiB,SAAgBhB,EAAOC,GACnE,IAAIK,EAAQ,aAAiBJ,GAC7B,OAAoB,gBAAoBU,GAAW,OAAS,CAC1DN,MAAOA,EACPL,IAAKA,GACJD,GACL,GAEA,OADAgB,EAAUF,YAAc,aAAeD,EAAgB,IAChDzB,EAAqB4B,EAAWJ,EACzC,CAEA,IChDWK,EACLC,ED+CFC,EAAS,CAAC,EAAEC,eAEZC,EAAe,qCAgBfC,EAAY,SAAmBC,GACjC,IAAI9C,EAAQ8C,EAAK9C,MACb+C,EAAaD,EAAKC,WAClBC,EAAcF,EAAKE,YAMvB,OALA,QAAehD,EAAO+C,EAAYC,IAClC,OAAyC,WACvC,OAAO,QAAahD,EAAO+C,EAAYC,EACzC,GAEO,IACT,EA6CIC,EA3CyB5B,EAAiB,SAAUE,EAAOvB,EAAOwB,GACpE,IAAI0B,EAAU3B,EAAM4B,IAIG,iBAAZD,QAAsD/C,IAA9BH,EAAMoD,WAAWF,KAClDA,EAAUlD,EAAMoD,WAAWF,IAG7B,IAAIG,EAAmB9B,EAAMqB,GACzBU,EAAmB,CAACJ,GACpBK,EAAY,GAEe,iBAApBhC,EAAMgC,UACfA,GAAY,QAAoBvD,EAAMoD,WAAYE,EAAkB/B,EAAMgC,WAC9C,MAAnBhC,EAAMgC,YACfA,EAAYhC,EAAMgC,UAAY,KAGhC,IAAIR,GAAa,OAAgBO,OAAkBnD,EAAW,aAAiBsB,IAE/E8B,GAAavD,EAAMgB,IAAM,IAAM+B,EAAWT,KAC1C,IAAIkB,EAAW,CAAC,EAEhB,IAAK,IAAIC,KAASlC,EACZmB,EAAOgB,KAAKnC,EAAOkC,IAAoB,QAAVA,GAAmBA,IAAUb,IAC5DY,EAASC,GAASlC,EAAMkC,IAU5B,OANAD,EAASD,UAAYA,EAEjB/B,IACFgC,EAAShC,IAAMA,GAGG,gBAAoB,WAAgB,KAAmB,gBAAoBqB,EAAW,CACxG7C,MAAOA,EACP+C,WAAYA,EACZC,YAAyC,iBAArBK,IACL,gBAAoBA,EAAkBG,GACzD,GC3IIG,EAAM,SAAa5F,EAAMwD,GAE3B,IAAIqC,EAAOC,UAEX,GAAa,MAATtC,IAAkBmB,EAAOgB,KAAKnC,EAAO,OACvC,OAAO,gBAAoBuC,WAAM3D,EAAWyD,GAG9C,IAAIG,EAAaH,EAAKI,OAClBC,EAAwB,IAAIC,MAAMH,GACtCE,EAAsB,GAAK,EAC3BA,EAAsB,GD4DC,SAA4BlG,EAAMwD,GAEzD,IAAIiC,EAAW,CAAC,EAEhB,IAAK,IAAIW,KAAQ5C,EACXmB,EAAOgB,KAAKnC,EAAO4C,KACrBX,EAASW,GAAQ5C,EAAM4C,IAM3B,OAFAX,EAASZ,GAAgB7E,EAElByF,CACT,CCzE6BY,CAAmBrG,EAAMwD,GAEpD,IAAK,IAAI8C,EAAI,EAAGA,EAAIN,EAAYM,IAC9BJ,EAAsBI,GAAKT,EAAKS,GAGlC,OAAO,gBAAoBP,MAAM,KAAMG,EACzC,EAEWzB,EAIRmB,IAAQA,EAAM,CAAC,GADKlB,IAAQA,EAAMD,EAAKC,MAAQD,EAAKC,IAAM,CAAC,IAM9D,IAAI6B,EAAwBjD,EAAiB,SAAUE,EAAOvB,GAE5D,IAAIuE,EAAShD,EAAMgD,OACfxB,GAAa,OAAgB,CAACwB,QAASpE,EAAW,aAAiBsB,IAMnE+C,EAAW,WAqDf,OApDA,OAAqC,WACnC,IAAIxD,EAAMhB,EAAMgB,IAAM,UAElByD,EAAQ,IAAIzE,EAAMyE,MAAMC,YAAY,CACtC1D,IAAKA,EACL2D,MAAO3E,EAAMyE,MAAME,MACnBC,UAAW5E,EAAMyE,MAAMG,UACvBC,OAAQ7E,EAAMyE,MAAMK,WAElBC,GAAc,EACdC,EAAOC,SAASC,cAAc,uBAA0BlE,EAAM,IAAM+B,EAAWT,KAAO,MAc1F,OAZItC,EAAMyE,MAAMU,KAAKnB,SACnBS,EAAMW,OAASpF,EAAMyE,MAAMU,KAAK,IAGrB,OAATH,IACFD,GAAc,EAEdC,EAAKK,aAAa,eAAgBrE,GAClCyD,EAAMa,QAAQ,CAACN,KAGjBR,EAASe,QAAU,CAACd,EAAOM,GACpB,WACLN,EAAMe,OACR,CACF,EAAG,CAACxF,KACJ,OAAqC,WACnC,IAAIyF,EAAkBjB,EAASe,QAC3Bd,EAAQgB,EAAgB,GAG5B,GAFkBA,EAAgB,GAGhCA,EAAgB,IAAK,MADvB,CAUA,QALwBtF,IAApB4C,EAAW2C,OAEb,QAAa1F,EAAO+C,EAAW2C,MAAM,GAGnCjB,EAAMU,KAAKnB,OAAQ,CAErB,IAAI2B,EAAUlB,EAAMU,KAAKV,EAAMU,KAAKnB,OAAS,GAAG4B,mBAChDnB,EAAMW,OAASO,EACflB,EAAMe,OACR,CAEAxF,EAAM6F,OAAO,GAAI9C,EAAY0B,GAAO,EAdpC,CAeF,EAAG,CAACzE,EAAO+C,EAAWT,OACf,IACT,GAEA,SAASa,IACP,IAAK,IAAI2C,EAAOjC,UAAUG,OAAQJ,EAAO,IAAIM,MAAM4B,GAAO3B,EAAO,EAAGA,EAAO2B,EAAM3B,IAC/EP,EAAKO,GAAQN,UAAUM,GAGzB,OAAO,OAAgBP,EACzB,CAEA,SAASmC,IACP,IAAIC,EAAa7C,EAAIW,WAAM,EAAQD,WAC/BvB,EAAO,aAAe0D,EAAW1D,KACrC,MAAO,CACLA,KAAMA,EACNiC,OAAQ,cAAgBjC,EAAO,IAAM0D,EAAWzB,OAAS,IACzD0B,KAAM,EACNC,SAAU,WACR,MAAO,QAAUC,KAAK7D,KAAO,IAAM6D,KAAK5B,OAAS,OACnD,EAEJ,CAEA,IAAI6B,EAAa,SAASA,EAAWxC,GAKnC,IAJA,IAAIyC,EAAMzC,EAAKI,OACXK,EAAI,EACJiC,EAAM,GAEHjC,EAAIgC,EAAKhC,IAAK,CACnB,IAAInE,EAAM0D,EAAKS,GACf,GAAW,MAAPnE,EAAJ,CACA,IAAIqG,OAAQ,EAEZ,cAAerG,GACb,IAAK,UACH,MAEF,IAAK,SAED,GAAIgE,MAAMsC,QAAQtG,GAChBqG,EAAQH,EAAWlG,QAKnB,IAAK,IAAInD,KAFTwJ,EAAQ,GAEMrG,EACRA,EAAInD,IAAMA,IACZwJ,IAAUA,GAAS,KACnBA,GAASxJ,GAKf,MAGJ,QAEIwJ,EAAQrG,EAIVqG,IACFD,IAAQA,GAAO,KACfA,GAAOC,EAlCgB,CAoC3B,CAEA,OAAOD,CACT,EAaI,EAAY,SAAmBxD,GACjC,IAAI9C,EAAQ8C,EAAK9C,MACbyG,EAAgB3D,EAAK2D,cAQzB,OAPA,OAAyC,WAEvC,IAAK,IAAIpC,EAAI,EAAGA,EAAIoC,EAAczC,OAAQK,KACxC,QAAarE,EAAOyG,EAAcpC,IAAI,EAE1C,GAEO,IACT,EAEIqC,EAA4BrF,EAAiB,SAAUE,EAAOvB,GAChE,IACIyG,EAAgB,GAEhBtD,EAAM,WAKR,IAAK,IAAI2C,EAAOjC,UAAUG,OAAQJ,EAAO,IAAIM,MAAM4B,GAAO3B,EAAO,EAAGA,EAAO2B,EAAM3B,IAC/EP,EAAKO,GAAQN,UAAUM,GAGzB,IAAIpB,GAAa,OAAgBa,EAAM5D,EAAMoD,YAI7C,OAHAqD,EAAcE,KAAK5D,IAEnB,QAAe/C,EAAO+C,GAAY,GAC3B/C,EAAMgB,IAAM,IAAM+B,EAAWT,IACtC,EAcIsE,EAAU,CACZzD,IAAKA,EACL0D,GAdO,WAKP,IAAK,IAAIC,EAAQjD,UAAUG,OAAQJ,EAAO,IAAIM,MAAM4C,GAAQrD,EAAQ,EAAGA,EAAQqD,EAAOrD,IACpFG,EAAKH,GAASI,UAAUJ,GAG1B,OArDJ,SAAeL,EAAYD,EAAKI,GAC9B,IAAID,EAAmB,GACnByD,GAAe,QAAoB3D,EAAYE,EAAkBC,GAErE,OAAID,EAAiBU,OAAS,EACrBT,EAGFwD,EAAe5D,EAAIG,EAC5B,CA4CW0D,CAAMhH,EAAMoD,WAAYD,EAAKiD,EAAWxC,GACjD,EAKE/B,MAAO,aAAiBJ,IAEtBwF,EAAM1F,EAAMU,SAAS2E,GAEzB,OAAoB,gBAAoB,WAAgB,KAAmB,gBAAoB,EAAW,CACxG5G,MAAOA,EACPyG,cAAeA,IACbQ,EACN,E,kBC/OEC,EAAOjJ,QAAU,EAAjB,M,kBCDF,IAAIkJ,EAAU,EAAQ,OAMlBC,EAAgB,CAClBC,mBAAmB,EACnBC,aAAa,EACbC,cAAc,EACdC,cAAc,EACdnF,aAAa,EACboF,iBAAiB,EACjBC,0BAA0B,EAC1BC,0BAA0B,EAC1BC,QAAQ,EACRC,WAAW,EACX9J,MAAM,GAEJ+J,EAAgB,CAClBxF,MAAM,EACN0B,QAAQ,EACR+D,WAAW,EACXC,QAAQ,EACRC,QAAQ,EACRpE,WAAW,EACXqE,OAAO,GASLC,EAAe,CACjB,UAAY,EACZC,SAAS,EACTZ,cAAc,EACdnF,aAAa,EACbwF,WAAW,EACX9J,MAAM,GAEJsK,EAAe,CAAC,EAIpB,SAASC,EAAWC,GAElB,OAAIpB,EAAQ5H,OAAOgJ,GACVJ,EAIFE,EAAaE,EAAoB,WAAMnB,CAChD,CAXAiB,EAAalB,EAAQ5I,YAhBK,CACxB,UAAY,EACZiK,QAAQ,EACRhB,cAAc,EACdnF,aAAa,EACbwF,WAAW,GAYbQ,EAAalB,EAAQzI,MAAQyJ,EAY7B,IAAIM,EAAiBxI,OAAOwI,eACxBC,EAAsBzI,OAAOyI,oBAC7BC,EAAwB1I,OAAO0I,sBAC/BC,EAA2B3I,OAAO2I,yBAClCC,EAAiB5I,OAAO4I,eACxBC,EAAkB7I,OAAO8H,UAsC7Bb,EAAOjJ,QArCP,SAAS0C,EAAqBC,EAAiBC,EAAiBkI,GAC9D,GAA+B,iBAApBlI,EAA8B,CAEvC,GAAIiI,EAAiB,CACnB,IAAIE,EAAqBH,EAAehI,GAEpCmI,GAAsBA,IAAuBF,GAC/CnI,EAAqBC,EAAiBoI,EAAoBD,EAE9D,CAEA,IAAIE,EAAOP,EAAoB7H,GAE3B8H,IACFM,EAAOA,EAAKC,OAAOP,EAAsB9H,KAM3C,IAHA,IAAIsI,EAAgBb,EAAW1H,GAC3BwI,EAAgBd,EAAWzH,GAEtBwD,EAAI,EAAGA,EAAI4E,EAAKjF,SAAUK,EAAG,CACpC,IAAIrD,EAAMiI,EAAK5E,GAEf,KAAKyD,EAAc9G,IAAU+H,GAAaA,EAAU/H,IAAWoI,GAAiBA,EAAcpI,IAAWmI,GAAiBA,EAAcnI,IAAO,CAC7I,IAAIqI,EAAaT,EAAyB/H,EAAiBG,GAE3D,IAEEyH,EAAe7H,EAAiBI,EAAKqI,EACvC,CAAE,MAAO1M,GAAI,CACf,CACF,CACF,CAEA,OAAOiE,CACT,C,mCCpGA,IAAI0I,EAAe,CACjBC,wBAAyB,EACzBC,YAAa,EACbC,kBAAmB,EACnBC,iBAAkB,EAClBC,iBAAkB,EAClBC,QAAS,EACTC,aAAc,EACdC,gBAAiB,EACjBC,YAAa,EACbC,QAAS,EACTC,KAAM,EACNC,SAAU,EACVC,aAAc,EACdC,WAAY,EACZC,aAAc,EACdC,UAAW,EACXC,QAAS,EACTC,WAAY,EACZC,YAAa,EACbC,aAAc,EACdC,WAAY,EACZC,cAAe,EACfC,eAAgB,EAChBC,gBAAiB,EACjBC,UAAW,EACXC,cAAe,EACfC,aAAc,EACdC,iBAAkB,EAClBC,WAAY,EACZC,WAAY,EACZC,QAAS,EACTC,MAAO,EACPC,QAAS,EACTC,MAAO,EACPC,QAAS,EACTC,OAAQ,EACRC,OAAQ,EACRC,KAAM,EACNC,gBAAiB,EAEjBC,YAAa,EACbC,aAAc,EACdC,YAAa,EACbC,gBAAiB,EACjBC,iBAAkB,EAClBC,iBAAkB,EAClBC,cAAe,EACfC,YAAa,G,WC5CXC,GAAgB,EAEhBC,EAAiB,aACjBC,EAAiB,8BAEjBC,EAAmB,SAA0BC,GAC/C,OAAkC,KAA3BA,EAASC,WAAW,EAC7B,EAEIC,EAAqB,SAA4B5K,GACnD,OAAgB,MAATA,GAAkC,kBAAVA,CACjC,EAEI6K,GAAkC,OAAQ,SAAUC,GACtD,OAAOL,EAAiBK,GAAaA,EAAYA,EAAUC,QAAQR,EAAgB,OAAOS,aAC5F,GAEIC,EAAoB,SAA2BjM,EAAKgB,GACtD,OAAQhB,GACN,IAAK,YACL,IAAK,gBAED,GAAqB,iBAAVgB,EACT,OAAOA,EAAM+K,QAAQP,EAAgB,SAAUU,EAAOC,EAAIC,GAMxD,OALAC,EAAS,CACP/K,KAAM6K,EACN5I,OAAQ6I,EACR1H,KAAM2H,GAEDF,CACT,GAKR,OAAsB,IAAlB,EAASnM,IAAeyL,EAAiBzL,IAAyB,iBAAVgB,GAAgC,IAAVA,EAI3EA,EAHEA,EAAQ,IAInB,EAEIsL,EAA6B,uJAEjC,SAASC,EAAoBC,EAAapK,EAAYqK,GACpD,GAAqB,MAAjBA,EACF,MAAO,GAGT,IAAIC,EAAoBD,EAExB,QAA2CtN,IAAvCuN,EAAkBC,iBAEpB,OAAOD,EAGT,cAAeD,GACb,IAAK,UAED,MAAO,GAGX,IAAK,SAED,IAAI1H,EAAY0H,EAEhB,GAAuB,IAAnB1H,EAAUE,KAMZ,OALAoH,EAAS,CACP/K,KAAMyD,EAAUzD,KAChBiC,OAAQwB,EAAUxB,OAClBmB,KAAM2H,GAEDtH,EAAUzD,KAGnB,IAAIsL,EAAmBH,EAEvB,QAAgCtN,IAA5ByN,EAAiBrJ,OAAsB,CACzC,IAAImB,EAAOkI,EAAiBlI,KAE5B,QAAavF,IAATuF,EAGF,UAAgBvF,IAATuF,GACL2H,EAAS,CACP/K,KAAMoD,EAAKpD,KACXiC,OAAQmB,EAAKnB,OACbmB,KAAM2H,GAER3H,EAAOA,EAAKA,KAKhB,OADakI,EAAiBrJ,OAAS,GAEzC,CAEA,OA2BR,SAAgCiJ,EAAapK,EAAYyK,GACvD,IAAIC,EAAS,GAEb,GAAI5J,MAAMsC,QAAQqH,GAChB,IAAK,IAAIxJ,EAAI,EAAGA,EAAIwJ,EAAI7J,OAAQK,IAC9ByJ,GAAUP,EAAoBC,EAAapK,EAAYyK,EAAIxJ,IAAM,SAGnE,IAAK,IAAIrD,KAAO6M,EAAK,CACnB,IAAI7L,EAAQ6L,EAAI7M,GAEhB,GAAqB,iBAAVgB,EAAoB,CAC7B,IAAI+L,EAAW/L,EAEG,MAAdoB,QAA+CjD,IAAzBiD,EAAW2K,GACnCD,GAAU9M,EAAM,IAAMoC,EAAW2K,GAAY,IACpCnB,EAAmBmB,KAC5BD,GAAUjB,EAAiB7L,GAAO,IAAMiM,EAAkBjM,EAAK+M,GAAY,IAE/E,KAAO,CACL,GAAY,0BAAR/M,GAAmCsL,EACrC,MAAM,IAAI0B,MAAMV,GAGlB,IAAIpJ,MAAMsC,QAAQxE,IAA8B,iBAAbA,EAAM,IAAkC,MAAdoB,QAA+CjD,IAAzBiD,EAAWpB,EAAM,IAM7F,CACL,IAAIiM,EAAeV,EAAoBC,EAAapK,EAAYpB,GAEhE,OAAQhB,GACN,IAAK,YACL,IAAK,gBAED8M,GAAUjB,EAAiB7L,GAAO,IAAMiN,EAAe,IACvD,MAGJ,QAGIH,GAAU9M,EAAM,IAAMiN,EAAe,IAG7C,MAtBE,IAAK,IAAIC,EAAK,EAAGA,EAAKlM,EAAMgC,OAAQkK,IAC9BtB,EAAmB5K,EAAMkM,MAC3BJ,GAAUjB,EAAiB7L,GAAO,IAAMiM,EAAkBjM,EAAKgB,EAAMkM,IAAO,IAqBpF,CACF,CAGF,OAAOJ,CACT,CAhFeK,CAAuBX,EAAapK,EAAYqK,GAG3D,IAAK,WAED,QAAoBtN,IAAhBqN,EAA2B,CAC7B,IAAIY,EAAiBf,EACjBgB,EAASZ,EAAcD,GAE3B,OADAH,EAASe,EACFb,EAAoBC,EAAapK,EAAYiL,EACtD,EAON,IAAIN,EAAWN,EAEf,GAAkB,MAAdrK,EACF,OAAO2K,EAGT,IAAIO,EAASlL,EAAW2K,GACxB,YAAkB5N,IAAXmO,EAAuBA,EAASP,CACzC,CAyDA,IAGIV,EAHAkB,EAAe,+BAInB,SAASC,EAAgB5K,EAAMR,EAAYoK,GACzC,GAAoB,IAAhB5J,EAAKI,QAAmC,iBAAZJ,EAAK,IAA+B,OAAZA,EAAK,SAAkCzD,IAAnByD,EAAK,GAAGW,OAClF,OAAOX,EAAK,GAGd,IAAI6K,GAAa,EACblK,EAAS,GACb8I,OAASlN,EACT,IAAIuO,EAAU9K,EAAK,GAEJ,MAAX8K,QAAmCvO,IAAhBuO,EAAQC,KAC7BF,GAAa,EACblK,GAAUgJ,EAAoBC,EAAapK,EAAYsL,IAIvDnK,GAF2BmK,EAEI,GAIjC,IAAK,IAAIrK,EAAI,EAAGA,EAAIT,EAAKI,OAAQK,IAC/BE,GAAUgJ,EAAoBC,EAAapK,EAAYQ,EAAKS,IAExDoK,IAGFlK,GAFyBmK,EAEIrK,IAKjCkK,EAAaK,UAAY,EAIzB,IAHA,IACI1B,EADA2B,EAAiB,GAG0B,QAAvC3B,EAAQqB,EAAaO,KAAKvK,KAChCsK,GAAkB,IAAM3B,EAAM,GAGhC,IAAI5K,EC/NN,SAAiByM,GAYf,IANA,IAEIhS,EAFAD,EAAI,EAGJuH,EAAI,EACJgC,EAAM0I,EAAI/K,OAEPqC,GAAO,IAAKhC,EAAGgC,GAAO,EAE3BtJ,EAEe,YAAV,OAHLA,EAAwB,IAApBgS,EAAIpC,WAAWtI,IAAmC,IAAtB0K,EAAIpC,aAAatI,KAAc,GAA2B,IAAtB0K,EAAIpC,aAAatI,KAAc,IAA4B,IAAtB0K,EAAIpC,aAAatI,KAAc,MAG9F,OAAZtH,IAAM,KAAgB,IAIpDD,EAEe,YAAV,OALLC,GAEAA,IAAM,MAGoC,OAAZA,IAAM,KAAgB,IAErC,YAAV,MAAJD,IAAyC,OAAZA,IAAM,KAAgB,IAItD,OAAQuJ,GACN,KAAK,EACHvJ,IAA8B,IAAxBiS,EAAIpC,WAAWtI,EAAI,KAAc,GAEzC,KAAK,EACHvH,IAA8B,IAAxBiS,EAAIpC,WAAWtI,EAAI,KAAc,EAEzC,KAAK,EAEHvH,EAEe,YAAV,OAHLA,GAAyB,IAApBiS,EAAIpC,WAAWtI,MAGsB,OAAZvH,IAAM,KAAgB,IASxD,SAHAA,EAEe,YAAV,OAHLA,GAAKA,IAAM,MAG+B,OAAZA,IAAM,KAAgB,KACvCA,IAAM,MAAQ,GAAGoJ,SAAS,GACzC,CD8Ka,CAAW3B,GAAUsK,EAEhC,MAAO,CACLvM,KAAMA,EACNiC,OAAQA,EACRmB,KAAM2H,EAEV,C,kBEvOA,SAAS2B,EAAoB5L,EAAYE,EAAkB2L,GACzD,IAAIlI,EAAe,GAQnB,OAPAkI,EAAWC,MAAM,KAAKC,QAAQ,SAAU5L,QACRpD,IAA1BiD,EAAWG,GACbD,EAAiBqD,KAAKvD,EAAWG,GAAa,KACrCA,IACTwD,GAAgBxD,EAAY,IAEhC,GACOwD,CACT,C,oCACA,IAAIqI,EAAiB,SAAwBpP,EAAO+C,EAAYC,GAC9D,IAAIO,EAAYvD,EAAMgB,IAAM,IAAM+B,EAAWT,MAO5B,IAAhBU,QAIwD7C,IAAhCH,EAAMoD,WAAWG,KACxCvD,EAAMoD,WAAWG,GAAaR,EAAWwB,OAE7C,EACI8K,EAAe,SAAsBrP,EAAO+C,EAAYC,GAC1DoM,EAAepP,EAAO+C,EAAYC,GAClC,IAAIO,EAAYvD,EAAMgB,IAAM,IAAM+B,EAAWT,KAE7C,QAAwCnC,IAApCH,EAAMsP,SAASvM,EAAWT,MAAqB,CACjD,IAAIiD,EAAUxC,EAEd,GACE/C,EAAM6F,OAAO9C,IAAewC,EAAU,IAAMhC,EAAY,GAAIgC,EAASvF,EAAMyE,OAAO,GAElFc,EAAUA,EAAQG,gBACCvF,IAAZoF,EACX,CACF,C,kBC1CA,SAASgK,IACP,OAAOA,EAAWtP,OAAOuP,OAASvP,OAAOuP,OAAOC,OAAS,SAAUvS,GACjE,IAAK,IAAIP,EAAI,EAAGA,EAAIkH,UAAUG,OAAQrH,IAAK,CACzC,IAAIW,EAAIuG,UAAUlH,GAClB,IAAK,IAAIU,KAAKC,GAAG,CAAG,GAAEqF,eAAee,KAAKpG,EAAGD,KAAOH,EAAEG,GAAKC,EAAED,GAC/D,CACA,OAAOH,CACT,EAAGqS,EAASzL,MAAM,KAAMD,UAC1B,C","sources":["webpack://internal.plugin-kuadrant/../../node_modules/@emotion/use-insertion-effect-with-fallbacks/dist/emotion-use-insertion-effect-with-fallbacks.browser.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/hoist-non-react-statics/node_modules/react-is/cjs/react-is.production.min.js","webpack://internal.plugin-kuadrant/../../node_modules/@emotion/memoize/dist/emotion-memoize.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@emotion/weak-memoize/dist/emotion-weak-memoize.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@emotion/react/_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@emotion/react/dist/emotion-element-f0de968e.browser.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@emotion/react/dist/emotion-react.browser.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/hoist-non-react-statics/node_modules/react-is/index.js","webpack://internal.plugin-kuadrant/../../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","webpack://internal.plugin-kuadrant/../../node_modules/@emotion/unitless/dist/emotion-unitless.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@emotion/serialize/dist/emotion-serialize.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@emotion/hash/dist/emotion-hash.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@babel/runtime/helpers/esm/extends.js"],"sourcesContent":["import * as React from 'react';\n\nvar syncFallback = function syncFallback(create) {\n return create();\n};\n\nvar useInsertionEffect = React['useInsertion' + 'Effect'] ? React['useInsertion' + 'Effect'] : false;\nvar useInsertionEffectAlwaysWithSyncFallback = useInsertionEffect || syncFallback;\nvar useInsertionEffectWithLayoutFallback = useInsertionEffect || React.useLayoutEffect;\n\nexport { useInsertionEffectAlwaysWithSyncFallback, useInsertionEffectWithLayoutFallback };\n","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","function memoize(fn) {\n var cache = Object.create(null);\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport { memoize as default };\n","var weakMemoize = function weakMemoize(func) {\n var cache = new WeakMap();\n return function (arg) {\n if (cache.has(arg)) {\n // Use non-null assertion because we just checked that the cache `has` it\n // This allows us to remove `undefined` from the return value\n return cache.get(arg);\n }\n\n var ret = func(arg);\n cache.set(arg, ret);\n return ret;\n };\n};\n\nexport { weakMemoize as default };\n","import hoistNonReactStatics$1 from 'hoist-non-react-statics';\n\n// this file isolates this package that is not tree-shakeable\n// and if this module doesn't actually contain any logic of its own\n// then Rollup just use 'hoist-non-react-statics' directly in other chunks\n\nvar hoistNonReactStatics = (function (targetComponent, sourceComponent) {\n return hoistNonReactStatics$1(targetComponent, sourceComponent);\n});\n\nexport { hoistNonReactStatics as default };\n","import * as React from 'react';\nimport { useContext, forwardRef } from 'react';\nimport createCache from '@emotion/cache';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport weakMemoize from '@emotion/weak-memoize';\nimport hoistNonReactStatics from '../_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js';\nimport { getRegisteredStyles, registerStyles, insertStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\nimport { useInsertionEffectAlwaysWithSyncFallback } from '@emotion/use-insertion-effect-with-fallbacks';\n\nvar isDevelopment = false;\n\nvar EmotionCacheContext = /* #__PURE__ */React.createContext( // we're doing this to avoid preconstruct's dead code elimination in this one case\n// because this module is primarily intended for the browser and node\n// but it's also required in react native and similar environments sometimes\n// and we could have a special build just for that\n// but this is much easier and the native packages\n// might use a different theme context in the future anyway\ntypeof HTMLElement !== 'undefined' ? /* #__PURE__ */createCache({\n key: 'css'\n}) : null);\n\nvar CacheProvider = EmotionCacheContext.Provider;\nvar __unsafe_useEmotionCache = function useEmotionCache() {\n return useContext(EmotionCacheContext);\n};\n\nvar withEmotionCache = function withEmotionCache(func) {\n return /*#__PURE__*/forwardRef(function (props, ref) {\n // the cache will never be null in the browser\n var cache = useContext(EmotionCacheContext);\n return func(props, cache, ref);\n });\n};\n\nvar ThemeContext = /* #__PURE__ */React.createContext({});\n\nvar useTheme = function useTheme() {\n return React.useContext(ThemeContext);\n};\n\nvar getTheme = function getTheme(outerTheme, theme) {\n if (typeof theme === 'function') {\n var mergedTheme = theme(outerTheme);\n\n return mergedTheme;\n }\n\n return _extends({}, outerTheme, theme);\n};\n\nvar createCacheWithTheme = /* #__PURE__ */weakMemoize(function (outerTheme) {\n return weakMemoize(function (theme) {\n return getTheme(outerTheme, theme);\n });\n});\nvar ThemeProvider = function ThemeProvider(props) {\n var theme = React.useContext(ThemeContext);\n\n if (props.theme !== theme) {\n theme = createCacheWithTheme(theme)(props.theme);\n }\n\n return /*#__PURE__*/React.createElement(ThemeContext.Provider, {\n value: theme\n }, props.children);\n};\nfunction withTheme(Component) {\n var componentName = Component.displayName || Component.name || 'Component';\n var WithTheme = /*#__PURE__*/React.forwardRef(function render(props, ref) {\n var theme = React.useContext(ThemeContext);\n return /*#__PURE__*/React.createElement(Component, _extends({\n theme: theme,\n ref: ref\n }, props));\n });\n WithTheme.displayName = \"WithTheme(\" + componentName + \")\";\n return hoistNonReactStatics(WithTheme, Component);\n}\n\nvar hasOwn = {}.hasOwnProperty;\n\nvar typePropName = '__EMOTION_TYPE_PLEASE_DO_NOT_USE__';\nvar createEmotionProps = function createEmotionProps(type, props) {\n\n var newProps = {};\n\n for (var _key in props) {\n if (hasOwn.call(props, _key)) {\n newProps[_key] = props[_key];\n }\n }\n\n newProps[typePropName] = type; // Runtime labeling is an opt-in feature because:\n\n return newProps;\n};\n\nvar Insertion = function Insertion(_ref) {\n var cache = _ref.cache,\n serialized = _ref.serialized,\n isStringTag = _ref.isStringTag;\n registerStyles(cache, serialized, isStringTag);\n useInsertionEffectAlwaysWithSyncFallback(function () {\n return insertStyles(cache, serialized, isStringTag);\n });\n\n return null;\n};\n\nvar Emotion = /* #__PURE__ */withEmotionCache(function (props, cache, ref) {\n var cssProp = props.css; // so that using `css` from `emotion` and passing the result to the css prop works\n // not passing the registered cache to serializeStyles because it would\n // make certain babel optimisations not possible\n\n if (typeof cssProp === 'string' && cache.registered[cssProp] !== undefined) {\n cssProp = cache.registered[cssProp];\n }\n\n var WrappedComponent = props[typePropName];\n var registeredStyles = [cssProp];\n var className = '';\n\n if (typeof props.className === 'string') {\n className = getRegisteredStyles(cache.registered, registeredStyles, props.className);\n } else if (props.className != null) {\n className = props.className + \" \";\n }\n\n var serialized = serializeStyles(registeredStyles, undefined, React.useContext(ThemeContext));\n\n className += cache.key + \"-\" + serialized.name;\n var newProps = {};\n\n for (var _key2 in props) {\n if (hasOwn.call(props, _key2) && _key2 !== 'css' && _key2 !== typePropName && (!isDevelopment )) {\n newProps[_key2] = props[_key2];\n }\n }\n\n newProps.className = className;\n\n if (ref) {\n newProps.ref = ref;\n }\n\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Insertion, {\n cache: cache,\n serialized: serialized,\n isStringTag: typeof WrappedComponent === 'string'\n }), /*#__PURE__*/React.createElement(WrappedComponent, newProps));\n});\n\nvar Emotion$1 = Emotion;\n\nexport { CacheProvider as C, Emotion$1 as E, ThemeContext as T, __unsafe_useEmotionCache as _, ThemeProvider as a, withTheme as b, createEmotionProps as c, hasOwn as h, isDevelopment as i, useTheme as u, withEmotionCache as w };\n","import { h as hasOwn, E as Emotion, c as createEmotionProps, w as withEmotionCache, T as ThemeContext, i as isDevelopment } from './emotion-element-f0de968e.browser.esm.js';\nexport { C as CacheProvider, T as ThemeContext, a as ThemeProvider, _ as __unsafe_useEmotionCache, u as useTheme, w as withEmotionCache, b as withTheme } from './emotion-element-f0de968e.browser.esm.js';\nimport * as React from 'react';\nimport { insertStyles, registerStyles, getRegisteredStyles } from '@emotion/utils';\nimport { useInsertionEffectWithLayoutFallback, useInsertionEffectAlwaysWithSyncFallback } from '@emotion/use-insertion-effect-with-fallbacks';\nimport { serializeStyles } from '@emotion/serialize';\nimport '@emotion/cache';\nimport '@babel/runtime/helpers/extends';\nimport '@emotion/weak-memoize';\nimport '../_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js';\nimport 'hoist-non-react-statics';\n\nvar jsx = function jsx(type, props) {\n // eslint-disable-next-line prefer-rest-params\n var args = arguments;\n\n if (props == null || !hasOwn.call(props, 'css')) {\n return React.createElement.apply(undefined, args);\n }\n\n var argsLength = args.length;\n var createElementArgArray = new Array(argsLength);\n createElementArgArray[0] = Emotion;\n createElementArgArray[1] = createEmotionProps(type, props);\n\n for (var i = 2; i < argsLength; i++) {\n createElementArgArray[i] = args[i];\n }\n\n return React.createElement.apply(null, createElementArgArray);\n};\n\n(function (_jsx) {\n var JSX;\n\n (function (_JSX) {})(JSX || (JSX = _jsx.JSX || (_jsx.JSX = {})));\n})(jsx || (jsx = {}));\n\n// initial render from browser, insertBefore context.sheet.tags[0] or if a style hasn't been inserted there yet, appendChild\n// initial client-side render from SSR, use place of hydrating tag\n\nvar Global = /* #__PURE__ */withEmotionCache(function (props, cache) {\n\n var styles = props.styles;\n var serialized = serializeStyles([styles], undefined, React.useContext(ThemeContext));\n // but it is based on a constant that will never change at runtime\n // it's effectively like having two implementations and switching them out\n // so it's not actually breaking anything\n\n\n var sheetRef = React.useRef();\n useInsertionEffectWithLayoutFallback(function () {\n var key = cache.key + \"-global\"; // use case of https://github.com/emotion-js/emotion/issues/2675\n\n var sheet = new cache.sheet.constructor({\n key: key,\n nonce: cache.sheet.nonce,\n container: cache.sheet.container,\n speedy: cache.sheet.isSpeedy\n });\n var rehydrating = false;\n var node = document.querySelector(\"style[data-emotion=\\\"\" + key + \" \" + serialized.name + \"\\\"]\");\n\n if (cache.sheet.tags.length) {\n sheet.before = cache.sheet.tags[0];\n }\n\n if (node !== null) {\n rehydrating = true; // clear the hash so this node won't be recognizable as rehydratable by other <Global/>s\n\n node.setAttribute('data-emotion', key);\n sheet.hydrate([node]);\n }\n\n sheetRef.current = [sheet, rehydrating];\n return function () {\n sheet.flush();\n };\n }, [cache]);\n useInsertionEffectWithLayoutFallback(function () {\n var sheetRefCurrent = sheetRef.current;\n var sheet = sheetRefCurrent[0],\n rehydrating = sheetRefCurrent[1];\n\n if (rehydrating) {\n sheetRefCurrent[1] = false;\n return;\n }\n\n if (serialized.next !== undefined) {\n // insert keyframes\n insertStyles(cache, serialized.next, true);\n }\n\n if (sheet.tags.length) {\n // if this doesn't exist then it will be null so the style element will be appended\n var element = sheet.tags[sheet.tags.length - 1].nextElementSibling;\n sheet.before = element;\n sheet.flush();\n }\n\n cache.insert(\"\", serialized, sheet, false);\n }, [cache, serialized.name]);\n return null;\n});\n\nfunction css() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return serializeStyles(args);\n}\n\nfunction keyframes() {\n var insertable = css.apply(void 0, arguments);\n var name = \"animation-\" + insertable.name;\n return {\n name: name,\n styles: \"@keyframes \" + name + \"{\" + insertable.styles + \"}\",\n anim: 1,\n toString: function toString() {\n return \"_EMO_\" + this.name + \"_\" + this.styles + \"_EMO_\";\n }\n };\n}\n\nvar classnames = function classnames(args) {\n var len = args.length;\n var i = 0;\n var cls = '';\n\n for (; i < len; i++) {\n var arg = args[i];\n if (arg == null) continue;\n var toAdd = void 0;\n\n switch (typeof arg) {\n case 'boolean':\n break;\n\n case 'object':\n {\n if (Array.isArray(arg)) {\n toAdd = classnames(arg);\n } else {\n\n toAdd = '';\n\n for (var k in arg) {\n if (arg[k] && k) {\n toAdd && (toAdd += ' ');\n toAdd += k;\n }\n }\n }\n\n break;\n }\n\n default:\n {\n toAdd = arg;\n }\n }\n\n if (toAdd) {\n cls && (cls += ' ');\n cls += toAdd;\n }\n }\n\n return cls;\n};\n\nfunction merge(registered, css, className) {\n var registeredStyles = [];\n var rawClassName = getRegisteredStyles(registered, registeredStyles, className);\n\n if (registeredStyles.length < 2) {\n return className;\n }\n\n return rawClassName + css(registeredStyles);\n}\n\nvar Insertion = function Insertion(_ref) {\n var cache = _ref.cache,\n serializedArr = _ref.serializedArr;\n useInsertionEffectAlwaysWithSyncFallback(function () {\n\n for (var i = 0; i < serializedArr.length; i++) {\n insertStyles(cache, serializedArr[i], false);\n }\n });\n\n return null;\n};\n\nvar ClassNames = /* #__PURE__ */withEmotionCache(function (props, cache) {\n var hasRendered = false;\n var serializedArr = [];\n\n var css = function css() {\n if (hasRendered && isDevelopment) {\n throw new Error('css can only be used during render');\n }\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var serialized = serializeStyles(args, cache.registered);\n serializedArr.push(serialized); // registration has to happen here as the result of this might get consumed by `cx`\n\n registerStyles(cache, serialized, false);\n return cache.key + \"-\" + serialized.name;\n };\n\n var cx = function cx() {\n if (hasRendered && isDevelopment) {\n throw new Error('cx can only be used during render');\n }\n\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return merge(cache.registered, css, classnames(args));\n };\n\n var content = {\n css: css,\n cx: cx,\n theme: React.useContext(ThemeContext)\n };\n var ele = props.children(content);\n hasRendered = true;\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Insertion, {\n cache: cache,\n serializedArr: serializedArr\n }), ele);\n});\n\nexport { ClassNames, Global, jsx as createElement, css, jsx, keyframes };\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n // React v16.11 and below\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n } // React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","var unitlessKeys = {\n animationIterationCount: 1,\n aspectRatio: 1,\n borderImageOutset: 1,\n borderImageSlice: 1,\n borderImageWidth: 1,\n boxFlex: 1,\n boxFlexGroup: 1,\n boxOrdinalGroup: 1,\n columnCount: 1,\n columns: 1,\n flex: 1,\n flexGrow: 1,\n flexPositive: 1,\n flexShrink: 1,\n flexNegative: 1,\n flexOrder: 1,\n gridRow: 1,\n gridRowEnd: 1,\n gridRowSpan: 1,\n gridRowStart: 1,\n gridColumn: 1,\n gridColumnEnd: 1,\n gridColumnSpan: 1,\n gridColumnStart: 1,\n msGridRow: 1,\n msGridRowSpan: 1,\n msGridColumn: 1,\n msGridColumnSpan: 1,\n fontWeight: 1,\n lineHeight: 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n scale: 1,\n tabSize: 1,\n widows: 1,\n zIndex: 1,\n zoom: 1,\n WebkitLineClamp: 1,\n // SVG-related properties\n fillOpacity: 1,\n floodOpacity: 1,\n stopOpacity: 1,\n strokeDasharray: 1,\n strokeDashoffset: 1,\n strokeMiterlimit: 1,\n strokeOpacity: 1,\n strokeWidth: 1\n};\n\nexport { unitlessKeys as default };\n","import hashString from '@emotion/hash';\nimport unitless from '@emotion/unitless';\nimport memoize from '@emotion/memoize';\n\nvar isDevelopment = false;\n\nvar hyphenateRegex = /[A-Z]|^ms/g;\nvar animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g;\n\nvar isCustomProperty = function isCustomProperty(property) {\n return property.charCodeAt(1) === 45;\n};\n\nvar isProcessableValue = function isProcessableValue(value) {\n return value != null && typeof value !== 'boolean';\n};\n\nvar processStyleName = /* #__PURE__ */memoize(function (styleName) {\n return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, '-$&').toLowerCase();\n});\n\nvar processStyleValue = function processStyleValue(key, value) {\n switch (key) {\n case 'animation':\n case 'animationName':\n {\n if (typeof value === 'string') {\n return value.replace(animationRegex, function (match, p1, p2) {\n cursor = {\n name: p1,\n styles: p2,\n next: cursor\n };\n return p1;\n });\n }\n }\n }\n\n if (unitless[key] !== 1 && !isCustomProperty(key) && typeof value === 'number' && value !== 0) {\n return value + 'px';\n }\n\n return value;\n};\n\nvar noComponentSelectorMessage = 'Component selectors can only be used in conjunction with ' + '@emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware ' + 'compiler transform.';\n\nfunction handleInterpolation(mergedProps, registered, interpolation) {\n if (interpolation == null) {\n return '';\n }\n\n var componentSelector = interpolation;\n\n if (componentSelector.__emotion_styles !== undefined) {\n\n return componentSelector;\n }\n\n switch (typeof interpolation) {\n case 'boolean':\n {\n return '';\n }\n\n case 'object':\n {\n var keyframes = interpolation;\n\n if (keyframes.anim === 1) {\n cursor = {\n name: keyframes.name,\n styles: keyframes.styles,\n next: cursor\n };\n return keyframes.name;\n }\n\n var serializedStyles = interpolation;\n\n if (serializedStyles.styles !== undefined) {\n var next = serializedStyles.next;\n\n if (next !== undefined) {\n // not the most efficient thing ever but this is a pretty rare case\n // and there will be very few iterations of this generally\n while (next !== undefined) {\n cursor = {\n name: next.name,\n styles: next.styles,\n next: cursor\n };\n next = next.next;\n }\n }\n\n var styles = serializedStyles.styles + \";\";\n return styles;\n }\n\n return createStringFromObject(mergedProps, registered, interpolation);\n }\n\n case 'function':\n {\n if (mergedProps !== undefined) {\n var previousCursor = cursor;\n var result = interpolation(mergedProps);\n cursor = previousCursor;\n return handleInterpolation(mergedProps, registered, result);\n }\n\n break;\n }\n } // finalize string values (regular strings and functions interpolated into css calls)\n\n\n var asString = interpolation;\n\n if (registered == null) {\n return asString;\n }\n\n var cached = registered[asString];\n return cached !== undefined ? cached : asString;\n}\n\nfunction createStringFromObject(mergedProps, registered, obj) {\n var string = '';\n\n if (Array.isArray(obj)) {\n for (var i = 0; i < obj.length; i++) {\n string += handleInterpolation(mergedProps, registered, obj[i]) + \";\";\n }\n } else {\n for (var key in obj) {\n var value = obj[key];\n\n if (typeof value !== 'object') {\n var asString = value;\n\n if (registered != null && registered[asString] !== undefined) {\n string += key + \"{\" + registered[asString] + \"}\";\n } else if (isProcessableValue(asString)) {\n string += processStyleName(key) + \":\" + processStyleValue(key, asString) + \";\";\n }\n } else {\n if (key === 'NO_COMPONENT_SELECTOR' && isDevelopment) {\n throw new Error(noComponentSelectorMessage);\n }\n\n if (Array.isArray(value) && typeof value[0] === 'string' && (registered == null || registered[value[0]] === undefined)) {\n for (var _i = 0; _i < value.length; _i++) {\n if (isProcessableValue(value[_i])) {\n string += processStyleName(key) + \":\" + processStyleValue(key, value[_i]) + \";\";\n }\n }\n } else {\n var interpolated = handleInterpolation(mergedProps, registered, value);\n\n switch (key) {\n case 'animation':\n case 'animationName':\n {\n string += processStyleName(key) + \":\" + interpolated + \";\";\n break;\n }\n\n default:\n {\n\n string += key + \"{\" + interpolated + \"}\";\n }\n }\n }\n }\n }\n }\n\n return string;\n}\n\nvar labelPattern = /label:\\s*([^\\s;{]+)\\s*(;|$)/g; // this is the cursor for keyframes\n// keyframes are stored on the SerializedStyles object as a linked list\n\nvar cursor;\nfunction serializeStyles(args, registered, mergedProps) {\n if (args.length === 1 && typeof args[0] === 'object' && args[0] !== null && args[0].styles !== undefined) {\n return args[0];\n }\n\n var stringMode = true;\n var styles = '';\n cursor = undefined;\n var strings = args[0];\n\n if (strings == null || strings.raw === undefined) {\n stringMode = false;\n styles += handleInterpolation(mergedProps, registered, strings);\n } else {\n var asTemplateStringsArr = strings;\n\n styles += asTemplateStringsArr[0];\n } // we start at 1 since we've already handled the first arg\n\n\n for (var i = 1; i < args.length; i++) {\n styles += handleInterpolation(mergedProps, registered, args[i]);\n\n if (stringMode) {\n var templateStringsArr = strings;\n\n styles += templateStringsArr[i];\n }\n } // using a global regex with .exec is stateful so lastIndex has to be reset each time\n\n\n labelPattern.lastIndex = 0;\n var identifierName = '';\n var match; // https://esbench.com/bench/5b809c2cf2949800a0f61fb5\n\n while ((match = labelPattern.exec(styles)) !== null) {\n identifierName += '-' + match[1];\n }\n\n var name = hashString(styles) + identifierName;\n\n return {\n name: name,\n styles: styles,\n next: cursor\n };\n}\n\nexport { serializeStyles };\n","/* eslint-disable */\n// Inspired by https://github.com/garycourt/murmurhash-js\n// Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86\nfunction murmur2(str) {\n // 'm' and 'r' are mixing constants generated offline.\n // They're not really 'magic', they just happen to work well.\n // const m = 0x5bd1e995;\n // const r = 24;\n // Initialize the hash\n var h = 0; // Mix 4 bytes at a time into the hash\n\n var k,\n i = 0,\n len = str.length;\n\n for (; len >= 4; ++i, len -= 4) {\n k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n k =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);\n k ^=\n /* k >>> r: */\n k >>> 24;\n h =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Handle the last few bytes of the input array\n\n\n switch (len) {\n case 3:\n h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n\n case 2:\n h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n\n case 1:\n h ^= str.charCodeAt(i) & 0xff;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Do a few final mixes of the hash to ensure the last few\n // bytes are well-incorporated.\n\n\n h ^= h >>> 13;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n return ((h ^ h >>> 15) >>> 0).toString(36);\n}\n\nexport { murmur2 as default };\n","var isBrowser = true;\n\nfunction getRegisteredStyles(registered, registeredStyles, classNames) {\n var rawClassName = '';\n classNames.split(' ').forEach(function (className) {\n if (registered[className] !== undefined) {\n registeredStyles.push(registered[className] + \";\");\n } else if (className) {\n rawClassName += className + \" \";\n }\n });\n return rawClassName;\n}\nvar registerStyles = function registerStyles(cache, serialized, isStringTag) {\n var className = cache.key + \"-\" + serialized.name;\n\n if ( // we only need to add the styles to the registered cache if the\n // class name could be used further down\n // the tree but if it's a string tag, we know it won't\n // so we don't have to add it to registered cache.\n // this improves memory usage since we can avoid storing the whole style string\n (isStringTag === false || // we need to always store it if we're in compat mode and\n // in node since emotion-server relies on whether a style is in\n // the registered cache to know whether a style is global or not\n // also, note that this check will be dead code eliminated in the browser\n isBrowser === false ) && cache.registered[className] === undefined) {\n cache.registered[className] = serialized.styles;\n }\n};\nvar insertStyles = function insertStyles(cache, serialized, isStringTag) {\n registerStyles(cache, serialized, isStringTag);\n var className = cache.key + \"-\" + serialized.name;\n\n if (cache.inserted[serialized.name] === undefined) {\n var current = serialized;\n\n do {\n cache.insert(serialized === current ? \".\" + className : '', current, cache.sheet, true);\n\n current = current.next;\n } while (current !== undefined);\n }\n};\n\nexport { getRegisteredStyles, insertStyles, registerStyles };\n","function _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\nexport { _extends as default };"],"names":["useInsertionEffect","useInsertionEffectAlwaysWithSyncFallback","create","useInsertionEffectWithLayoutFallback","b","Symbol","for","c","d","e","f","g","h","k","l","m","n","p","q","r","t","v","w","x","y","z","a","u","$$typeof","type","A","exports","AsyncMode","ConcurrentMode","ContextConsumer","ContextProvider","Element","ForwardRef","Fragment","Lazy","Memo","Portal","Profiler","StrictMode","Suspense","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isElement","isForwardRef","isFragment","isLazy","isMemo","isPortal","isProfiler","isStrictMode","isSuspense","isValidElementType","typeOf","memoize","fn","cache","Object","arg","undefined","weakMemoize","func","WeakMap","has","get","ret","set","hoistNonReactStatics","targetComponent","sourceComponent","EmotionCacheContext","HTMLElement","key","CacheProvider","Provider","__unsafe_useEmotionCache","useContext","withEmotionCache","forwardRef","props","ref","ThemeContext","useTheme","createCacheWithTheme","outerTheme","theme","getTheme","ThemeProvider","value","children","withTheme","Component","componentName","displayName","name","WithTheme","_jsx","JSX","hasOwn","hasOwnProperty","typePropName","Insertion","_ref","serialized","isStringTag","Emotion$1","cssProp","css","registered","WrappedComponent","registeredStyles","className","newProps","_key2","call","jsx","args","arguments","apply","argsLength","length","createElementArgArray","Array","_key","createEmotionProps","i","Global","styles","sheetRef","sheet","constructor","nonce","container","speedy","isSpeedy","rehydrating","node","document","querySelector","tags","before","setAttribute","hydrate","current","flush","sheetRefCurrent","next","element","nextElementSibling","insert","_len","keyframes","insertable","anim","toString","this","classnames","len","cls","toAdd","isArray","serializedArr","ClassNames","push","content","cx","_len2","rawClassName","merge","ele","module","reactIs","REACT_STATICS","childContextTypes","contextType","contextTypes","defaultProps","getDefaultProps","getDerivedStateFromError","getDerivedStateFromProps","mixins","propTypes","KNOWN_STATICS","prototype","caller","callee","arity","MEMO_STATICS","compare","TYPE_STATICS","getStatics","component","render","defineProperty","getOwnPropertyNames","getOwnPropertySymbols","getOwnPropertyDescriptor","getPrototypeOf","objectPrototype","blacklist","inheritedComponent","keys","concat","targetStatics","sourceStatics","descriptor","unitlessKeys","animationIterationCount","aspectRatio","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","columns","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","msGridRow","msGridRowSpan","msGridColumn","msGridColumnSpan","fontWeight","lineHeight","opacity","order","orphans","scale","tabSize","widows","zIndex","zoom","WebkitLineClamp","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth","isDevelopment","hyphenateRegex","animationRegex","isCustomProperty","property","charCodeAt","isProcessableValue","processStyleName","styleName","replace","toLowerCase","processStyleValue","match","p1","p2","cursor","noComponentSelectorMessage","handleInterpolation","mergedProps","interpolation","componentSelector","__emotion_styles","serializedStyles","obj","string","asString","Error","interpolated","_i","createStringFromObject","previousCursor","result","cached","labelPattern","serializeStyles","stringMode","strings","raw","lastIndex","identifierName","exec","str","getRegisteredStyles","classNames","split","forEach","registerStyles","insertStyles","inserted","_extends","assign","bind"],"sourceRoot":""}