@kuadrant/kuadrant-backstage-plugin-frontend 0.0.1-test.1-57ace816 → 0.0.1-test.1-48246e3

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 (475) hide show
  1. package/dist/components/ApiAccessCard/ApiAccessCard.esm.js +15 -10
  2. package/dist/components/ApiAccessCard/ApiAccessCard.esm.js.map +1 -1
  3. package/dist/components/ApiKeyManagementTab/ApiKeyManagementTab.esm.js +24 -8
  4. package/dist/components/ApiKeyManagementTab/ApiKeyManagementTab.esm.js.map +1 -1
  5. package/dist/components/ApprovalQueueCard/ApprovalQueueCard.esm.js +80 -48
  6. package/dist/components/ApprovalQueueCard/ApprovalQueueCard.esm.js.map +1 -1
  7. package/dist/components/CreateAPIProductDialog/CreateAPIProductDialog.esm.js +59 -25
  8. package/dist/components/CreateAPIProductDialog/CreateAPIProductDialog.esm.js.map +1 -1
  9. package/dist/components/EditAPIProductDialog/EditAPIProductDialog.esm.js +53 -5
  10. package/dist/components/EditAPIProductDialog/EditAPIProductDialog.esm.js.map +1 -1
  11. package/dist/components/KuadrantPage/KuadrantPage.esm.js +19 -10
  12. package/dist/components/KuadrantPage/KuadrantPage.esm.js.map +1 -1
  13. package/dist/components/MyApiKeysCard/MyApiKeysCard.esm.js +175 -0
  14. package/dist/components/MyApiKeysCard/MyApiKeysCard.esm.js.map +1 -0
  15. package/dist/components/PlanPolicyDetailsCard/PlanPolicyDetails.esm.js +47 -0
  16. package/dist/components/PlanPolicyDetailsCard/PlanPolicyDetails.esm.js.map +1 -0
  17. package/dist-scalprum/configSchema.json +1 -0
  18. package/dist-scalprum/internal.plugin-kuadrant.908832be3d1bbb2c9c5b.js +2 -0
  19. package/dist-scalprum/internal.plugin-kuadrant.908832be3d1bbb2c9c5b.js.map +1 -0
  20. package/dist-scalprum/plugin-manifest.json +11 -0
  21. package/dist-scalprum/static/1613.71f0fccd.chunk.js +3 -0
  22. package/dist-scalprum/static/1613.71f0fccd.chunk.js.LICENSE.txt +10 -0
  23. package/dist-scalprum/static/1613.71f0fccd.chunk.js.map +1 -0
  24. package/dist-scalprum/static/1836.b74b4c40.chunk.js +3 -0
  25. package/dist-scalprum/static/1836.b74b4c40.chunk.js.LICENSE.txt +10 -0
  26. package/dist-scalprum/static/1836.b74b4c40.chunk.js.map +1 -0
  27. package/dist-scalprum/static/2198.5905970e.chunk.js +2 -0
  28. package/dist-scalprum/static/2198.5905970e.chunk.js.map +1 -0
  29. package/dist-scalprum/static/3007.bffc9924.chunk.js +2 -0
  30. package/dist-scalprum/static/3007.bffc9924.chunk.js.map +1 -0
  31. package/dist-scalprum/static/3144.6f99ccee.chunk.js +3 -0
  32. package/dist-scalprum/static/3144.6f99ccee.chunk.js.LICENSE.txt +19 -0
  33. package/dist-scalprum/static/3144.6f99ccee.chunk.js.map +1 -0
  34. package/dist-scalprum/static/3483.2f14a8ca.chunk.js +3 -0
  35. package/dist-scalprum/static/3483.2f14a8ca.chunk.js.LICENSE.txt +5 -0
  36. package/dist-scalprum/static/3483.2f14a8ca.chunk.js.map +1 -0
  37. package/dist-scalprum/static/3647.b96f9b3e.chunk.js +2 -0
  38. package/dist-scalprum/static/3647.b96f9b3e.chunk.js.map +1 -0
  39. package/dist-scalprum/static/3657.59d45756.chunk.js +3 -0
  40. package/dist-scalprum/static/3657.59d45756.chunk.js.LICENSE.txt +10 -0
  41. package/dist-scalprum/static/3657.59d45756.chunk.js.map +1 -0
  42. package/dist-scalprum/static/4041.29923ad9.chunk.js +3 -0
  43. package/dist-scalprum/static/4041.29923ad9.chunk.js.LICENSE.txt +9 -0
  44. package/dist-scalprum/static/4041.29923ad9.chunk.js.map +1 -0
  45. package/dist-scalprum/static/4161.aa5fd28d.chunk.js +3 -0
  46. package/dist-scalprum/static/4161.aa5fd28d.chunk.js.LICENSE.txt +27 -0
  47. package/dist-scalprum/static/4161.aa5fd28d.chunk.js.map +1 -0
  48. package/dist-scalprum/static/428.0a290bc6.chunk.js +2 -0
  49. package/dist-scalprum/static/428.0a290bc6.chunk.js.map +1 -0
  50. package/dist-scalprum/static/4306.133aa342.chunk.js +2 -0
  51. package/dist-scalprum/static/4306.133aa342.chunk.js.map +1 -0
  52. package/dist-scalprum/static/441.8bd811bc.chunk.js +2 -0
  53. package/dist-scalprum/static/441.8bd811bc.chunk.js.map +1 -0
  54. package/dist-scalprum/static/4491.a2e0258f.chunk.js +2 -0
  55. package/dist-scalprum/static/4491.a2e0258f.chunk.js.map +1 -0
  56. package/dist-scalprum/static/4570.8b9f98d7.chunk.js +3 -0
  57. package/dist-scalprum/static/4570.8b9f98d7.chunk.js.LICENSE.txt +16 -0
  58. package/dist-scalprum/static/4570.8b9f98d7.chunk.js.map +1 -0
  59. package/dist-scalprum/static/5222.796292ca.chunk.js +2 -0
  60. package/dist-scalprum/static/5222.796292ca.chunk.js.map +1 -0
  61. package/dist-scalprum/static/5453.d8d305e9.chunk.js +2 -0
  62. package/dist-scalprum/static/5453.d8d305e9.chunk.js.map +1 -0
  63. package/dist-scalprum/static/5568.5dbce633.chunk.js +3 -0
  64. package/dist-scalprum/static/5568.5dbce633.chunk.js.LICENSE.txt +18 -0
  65. package/dist-scalprum/static/5568.5dbce633.chunk.js.map +1 -0
  66. package/dist-scalprum/static/5603.05d9ca7f.chunk.js +2 -0
  67. package/dist-scalprum/static/5603.05d9ca7f.chunk.js.map +1 -0
  68. package/dist-scalprum/static/6272.e49551fa.chunk.js +2 -0
  69. package/dist-scalprum/static/6272.e49551fa.chunk.js.map +1 -0
  70. package/dist-scalprum/static/6281.29f4549b.chunk.js +2 -0
  71. package/dist-scalprum/static/6281.29f4549b.chunk.js.map +1 -0
  72. package/dist-scalprum/static/6352.d48bba8c.chunk.js +2 -0
  73. package/dist-scalprum/static/6352.d48bba8c.chunk.js.map +1 -0
  74. package/dist-scalprum/static/6872.feed76d2.chunk.js +2 -0
  75. package/dist-scalprum/static/6872.feed76d2.chunk.js.map +1 -0
  76. package/dist-scalprum/static/7601.08d8ff3f.chunk.js +2 -0
  77. package/dist-scalprum/static/7601.08d8ff3f.chunk.js.map +1 -0
  78. package/dist-scalprum/static/7632.26afde62.chunk.js +2 -0
  79. package/dist-scalprum/static/7632.26afde62.chunk.js.map +1 -0
  80. package/dist-scalprum/static/7984.c8511b89.chunk.js +2 -0
  81. package/dist-scalprum/static/7984.c8511b89.chunk.js.map +1 -0
  82. package/dist-scalprum/static/8365.75ea3581.chunk.js +2 -0
  83. package/dist-scalprum/static/8365.75ea3581.chunk.js.map +1 -0
  84. package/dist-scalprum/static/8617.d1dc70a8.chunk.js +2 -0
  85. package/dist-scalprum/static/8617.d1dc70a8.chunk.js.map +1 -0
  86. package/dist-scalprum/static/9288.61b45746.chunk.js +3 -0
  87. package/dist-scalprum/static/9288.61b45746.chunk.js.LICENSE.txt +33 -0
  88. package/dist-scalprum/static/9288.61b45746.chunk.js.map +1 -0
  89. package/dist-scalprum/static/exposed-PluginRoot.50e173c2.chunk.js +2 -0
  90. package/dist-scalprum/static/exposed-PluginRoot.50e173c2.chunk.js.map +1 -0
  91. package/dist-scalprum/static/react-syntax-highlighter/lowlight-import.2bd53873.chunk.js +2 -0
  92. package/dist-scalprum/static/react-syntax-highlighter/lowlight-import.2bd53873.chunk.js.map +1 -0
  93. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_abnf.bb6a8626.chunk.js +2 -0
  94. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_abnf.bb6a8626.chunk.js.map +1 -0
  95. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_accesslog.bd112f1a.chunk.js +2 -0
  96. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_accesslog.bd112f1a.chunk.js.map +1 -0
  97. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_actionscript.78db0238.chunk.js +2 -0
  98. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_actionscript.78db0238.chunk.js.map +1 -0
  99. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_ada.b0d90871.chunk.js +2 -0
  100. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_ada.b0d90871.chunk.js.map +1 -0
  101. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_angelscript.f9816c44.chunk.js +2 -0
  102. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_angelscript.f9816c44.chunk.js.map +1 -0
  103. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_apache.aa86d495.chunk.js +2 -0
  104. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_apache.aa86d495.chunk.js.map +1 -0
  105. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_applescript.ddf703d6.chunk.js +2 -0
  106. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_applescript.ddf703d6.chunk.js.map +1 -0
  107. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_arcade.70910623.chunk.js +2 -0
  108. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_arcade.70910623.chunk.js.map +1 -0
  109. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_arduino.9b9ce313.chunk.js +2 -0
  110. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_arduino.9b9ce313.chunk.js.map +1 -0
  111. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_armasm.4bfb8996.chunk.js +2 -0
  112. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_armasm.4bfb8996.chunk.js.map +1 -0
  113. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_asciidoc.4b40a3f9.chunk.js +2 -0
  114. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_asciidoc.4b40a3f9.chunk.js.map +1 -0
  115. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_aspectj.35f221e8.chunk.js +2 -0
  116. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_aspectj.35f221e8.chunk.js.map +1 -0
  117. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_autohotkey.614c5248.chunk.js +2 -0
  118. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_autohotkey.614c5248.chunk.js.map +1 -0
  119. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_autoit.a06c1c62.chunk.js +2 -0
  120. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_autoit.a06c1c62.chunk.js.map +1 -0
  121. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_avrasm.6381890e.chunk.js +2 -0
  122. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_avrasm.6381890e.chunk.js.map +1 -0
  123. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_awk.dfc9b0b0.chunk.js +2 -0
  124. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_awk.dfc9b0b0.chunk.js.map +1 -0
  125. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_axapta.80d14346.chunk.js +2 -0
  126. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_axapta.80d14346.chunk.js.map +1 -0
  127. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_bash.53f7c730.chunk.js +2 -0
  128. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_bash.53f7c730.chunk.js.map +1 -0
  129. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_basic.ec232b8a.chunk.js +2 -0
  130. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_basic.ec232b8a.chunk.js.map +1 -0
  131. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_bnf.84e0a497.chunk.js +2 -0
  132. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_bnf.84e0a497.chunk.js.map +1 -0
  133. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_brainfuck.31bde7c5.chunk.js +2 -0
  134. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_brainfuck.31bde7c5.chunk.js.map +1 -0
  135. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_c.b43ce116.chunk.js +2 -0
  136. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_c.b43ce116.chunk.js.map +1 -0
  137. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_cLike.f884fdc0.chunk.js +2 -0
  138. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_cLike.f884fdc0.chunk.js.map +1 -0
  139. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_cal.781cc6c6.chunk.js +2 -0
  140. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_cal.781cc6c6.chunk.js.map +1 -0
  141. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_capnproto.79dfc31f.chunk.js +2 -0
  142. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_capnproto.79dfc31f.chunk.js.map +1 -0
  143. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_ceylon.ab3b1c28.chunk.js +2 -0
  144. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_ceylon.ab3b1c28.chunk.js.map +1 -0
  145. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_clean.97b48014.chunk.js +2 -0
  146. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_clean.97b48014.chunk.js.map +1 -0
  147. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_clojure.e3fcc98c.chunk.js +2 -0
  148. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_clojure.e3fcc98c.chunk.js.map +1 -0
  149. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_clojureRepl.e6dbc3b4.chunk.js +2 -0
  150. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_clojureRepl.e6dbc3b4.chunk.js.map +1 -0
  151. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_cmake.cb9028b5.chunk.js +2 -0
  152. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_cmake.cb9028b5.chunk.js.map +1 -0
  153. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_coffeescript.3bc87b5b.chunk.js +2 -0
  154. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_coffeescript.3bc87b5b.chunk.js.map +1 -0
  155. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_coq.6b156852.chunk.js +2 -0
  156. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_coq.6b156852.chunk.js.map +1 -0
  157. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_cos.78d69dee.chunk.js +2 -0
  158. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_cos.78d69dee.chunk.js.map +1 -0
  159. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_cpp.ff6a8f78.chunk.js +2 -0
  160. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_cpp.ff6a8f78.chunk.js.map +1 -0
  161. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_crmsh.58c4cb07.chunk.js +2 -0
  162. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_crmsh.58c4cb07.chunk.js.map +1 -0
  163. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_crystal.3a36e63f.chunk.js +2 -0
  164. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_crystal.3a36e63f.chunk.js.map +1 -0
  165. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_csharp.ea98c6fb.chunk.js +2 -0
  166. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_csharp.ea98c6fb.chunk.js.map +1 -0
  167. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_csp.7fc6f9a3.chunk.js +2 -0
  168. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_csp.7fc6f9a3.chunk.js.map +1 -0
  169. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_css.2cc312ae.chunk.js +2 -0
  170. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_css.2cc312ae.chunk.js.map +1 -0
  171. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_d.bf4f2b44.chunk.js +2 -0
  172. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_d.bf4f2b44.chunk.js.map +1 -0
  173. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_dart.0a0b12af.chunk.js +2 -0
  174. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_dart.0a0b12af.chunk.js.map +1 -0
  175. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_delphi.588e191d.chunk.js +2 -0
  176. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_delphi.588e191d.chunk.js.map +1 -0
  177. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_diff.a8373241.chunk.js +2 -0
  178. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_diff.a8373241.chunk.js.map +1 -0
  179. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_django.8fb85401.chunk.js +2 -0
  180. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_django.8fb85401.chunk.js.map +1 -0
  181. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_dns.6d79126a.chunk.js +2 -0
  182. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_dns.6d79126a.chunk.js.map +1 -0
  183. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_dockerfile.2c5fdf55.chunk.js +2 -0
  184. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_dockerfile.2c5fdf55.chunk.js.map +1 -0
  185. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_dos.1ede6e37.chunk.js +2 -0
  186. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_dos.1ede6e37.chunk.js.map +1 -0
  187. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_dsconfig.c3457b50.chunk.js +2 -0
  188. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_dsconfig.c3457b50.chunk.js.map +1 -0
  189. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_dts.8fd3703c.chunk.js +2 -0
  190. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_dts.8fd3703c.chunk.js.map +1 -0
  191. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_dust.b30d0c38.chunk.js +2 -0
  192. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_dust.b30d0c38.chunk.js.map +1 -0
  193. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_ebnf.a34b6944.chunk.js +2 -0
  194. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_ebnf.a34b6944.chunk.js.map +1 -0
  195. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_elixir.1e79c9b9.chunk.js +2 -0
  196. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_elixir.1e79c9b9.chunk.js.map +1 -0
  197. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_elm.8a488b19.chunk.js +2 -0
  198. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_elm.8a488b19.chunk.js.map +1 -0
  199. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_erb.4ac917b8.chunk.js +2 -0
  200. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_erb.4ac917b8.chunk.js.map +1 -0
  201. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_erlang.501777c7.chunk.js +2 -0
  202. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_erlang.501777c7.chunk.js.map +1 -0
  203. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_erlangRepl.0d7f4890.chunk.js +2 -0
  204. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_erlangRepl.0d7f4890.chunk.js.map +1 -0
  205. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_excel.2f5c76b9.chunk.js +2 -0
  206. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_excel.2f5c76b9.chunk.js.map +1 -0
  207. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_fix.5ee62733.chunk.js +2 -0
  208. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_fix.5ee62733.chunk.js.map +1 -0
  209. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_flix.972cc801.chunk.js +2 -0
  210. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_flix.972cc801.chunk.js.map +1 -0
  211. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_fortran.38ec3d00.chunk.js +2 -0
  212. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_fortran.38ec3d00.chunk.js.map +1 -0
  213. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_fsharp.2ba37c00.chunk.js +2 -0
  214. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_fsharp.2ba37c00.chunk.js.map +1 -0
  215. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_gams.a45eb030.chunk.js +2 -0
  216. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_gams.a45eb030.chunk.js.map +1 -0
  217. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_gauss.cceeafb0.chunk.js +2 -0
  218. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_gauss.cceeafb0.chunk.js.map +1 -0
  219. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_gcode.378d3296.chunk.js +2 -0
  220. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_gcode.378d3296.chunk.js.map +1 -0
  221. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_gherkin.e740620a.chunk.js +2 -0
  222. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_gherkin.e740620a.chunk.js.map +1 -0
  223. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_glsl.bb5b0086.chunk.js +2 -0
  224. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_glsl.bb5b0086.chunk.js.map +1 -0
  225. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_gml.2347c999.chunk.js +2 -0
  226. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_gml.2347c999.chunk.js.map +1 -0
  227. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_go.abc0a144.chunk.js +2 -0
  228. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_go.abc0a144.chunk.js.map +1 -0
  229. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_golo.eaa5e2bf.chunk.js +2 -0
  230. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_golo.eaa5e2bf.chunk.js.map +1 -0
  231. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_gradle.72fdf84d.chunk.js +2 -0
  232. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_gradle.72fdf84d.chunk.js.map +1 -0
  233. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_groovy.ecd68b19.chunk.js +2 -0
  234. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_groovy.ecd68b19.chunk.js.map +1 -0
  235. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_haml.d698757b.chunk.js +2 -0
  236. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_haml.d698757b.chunk.js.map +1 -0
  237. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_handlebars.75c0a89b.chunk.js +2 -0
  238. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_handlebars.75c0a89b.chunk.js.map +1 -0
  239. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_haskell.bbd3c104.chunk.js +2 -0
  240. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_haskell.bbd3c104.chunk.js.map +1 -0
  241. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_haxe.e2543cc2.chunk.js +2 -0
  242. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_haxe.e2543cc2.chunk.js.map +1 -0
  243. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_hsp.5d714528.chunk.js +2 -0
  244. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_hsp.5d714528.chunk.js.map +1 -0
  245. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_htmlbars.e57e3c89.chunk.js +2 -0
  246. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_htmlbars.e57e3c89.chunk.js.map +1 -0
  247. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_http.5859273c.chunk.js +2 -0
  248. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_http.5859273c.chunk.js.map +1 -0
  249. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_hy.c60db034.chunk.js +2 -0
  250. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_hy.c60db034.chunk.js.map +1 -0
  251. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_inform7.78be038f.chunk.js +2 -0
  252. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_inform7.78be038f.chunk.js.map +1 -0
  253. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_ini.d9d4ed7e.chunk.js +2 -0
  254. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_ini.d9d4ed7e.chunk.js.map +1 -0
  255. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_irpf90.25afcc29.chunk.js +2 -0
  256. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_irpf90.25afcc29.chunk.js.map +1 -0
  257. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_isbl.abe269c1.chunk.js +2 -0
  258. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_isbl.abe269c1.chunk.js.map +1 -0
  259. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_java.e04d1c07.chunk.js +2 -0
  260. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_java.e04d1c07.chunk.js.map +1 -0
  261. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_javascript.b0ad82d3.chunk.js +2 -0
  262. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_javascript.b0ad82d3.chunk.js.map +1 -0
  263. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_jbossCli.1ff533ef.chunk.js +2 -0
  264. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_jbossCli.1ff533ef.chunk.js.map +1 -0
  265. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_json.d934b52b.chunk.js +2 -0
  266. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_json.d934b52b.chunk.js.map +1 -0
  267. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_julia.f43a39d0.chunk.js +2 -0
  268. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_julia.f43a39d0.chunk.js.map +1 -0
  269. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_juliaRepl.e3bfcde8.chunk.js +2 -0
  270. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_juliaRepl.e3bfcde8.chunk.js.map +1 -0
  271. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_kotlin.c5eaa6f5.chunk.js +2 -0
  272. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_kotlin.c5eaa6f5.chunk.js.map +1 -0
  273. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_lasso.8d4054e7.chunk.js +2 -0
  274. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_lasso.8d4054e7.chunk.js.map +1 -0
  275. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_latex.b4bb9102.chunk.js +2 -0
  276. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_latex.b4bb9102.chunk.js.map +1 -0
  277. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_ldif.74045e43.chunk.js +2 -0
  278. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_ldif.74045e43.chunk.js.map +1 -0
  279. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_leaf.92519810.chunk.js +2 -0
  280. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_leaf.92519810.chunk.js.map +1 -0
  281. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_less.cc574d49.chunk.js +2 -0
  282. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_less.cc574d49.chunk.js.map +1 -0
  283. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_lisp.1cb2f675.chunk.js +2 -0
  284. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_lisp.1cb2f675.chunk.js.map +1 -0
  285. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_livecodeserver.f624f22d.chunk.js +2 -0
  286. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_livecodeserver.f624f22d.chunk.js.map +1 -0
  287. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_livescript.3ece3068.chunk.js +2 -0
  288. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_livescript.3ece3068.chunk.js.map +1 -0
  289. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_llvm.f32d41e6.chunk.js +2 -0
  290. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_llvm.f32d41e6.chunk.js.map +1 -0
  291. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_lsl.b6519e02.chunk.js +2 -0
  292. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_lsl.b6519e02.chunk.js.map +1 -0
  293. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_lua.52f73c98.chunk.js +2 -0
  294. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_lua.52f73c98.chunk.js.map +1 -0
  295. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_makefile.cad796c9.chunk.js +2 -0
  296. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_makefile.cad796c9.chunk.js.map +1 -0
  297. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_markdown.1489792c.chunk.js +2 -0
  298. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_markdown.1489792c.chunk.js.map +1 -0
  299. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_mathematica.d8631b37.chunk.js +2 -0
  300. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_mathematica.d8631b37.chunk.js.map +1 -0
  301. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_matlab.114e44eb.chunk.js +2 -0
  302. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_matlab.114e44eb.chunk.js.map +1 -0
  303. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_maxima.f1f17544.chunk.js +2 -0
  304. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_maxima.f1f17544.chunk.js.map +1 -0
  305. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_mel.5251fe1a.chunk.js +2 -0
  306. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_mel.5251fe1a.chunk.js.map +1 -0
  307. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_mercury.fa8fdac0.chunk.js +2 -0
  308. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_mercury.fa8fdac0.chunk.js.map +1 -0
  309. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_mipsasm.f5bc5b04.chunk.js +2 -0
  310. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_mipsasm.f5bc5b04.chunk.js.map +1 -0
  311. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_mizar.9b39cf3b.chunk.js +2 -0
  312. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_mizar.9b39cf3b.chunk.js.map +1 -0
  313. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_mojolicious.0cf721ff.chunk.js +2 -0
  314. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_mojolicious.0cf721ff.chunk.js.map +1 -0
  315. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_monkey.5f60f06d.chunk.js +2 -0
  316. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_monkey.5f60f06d.chunk.js.map +1 -0
  317. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_moonscript.443301b3.chunk.js +2 -0
  318. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_moonscript.443301b3.chunk.js.map +1 -0
  319. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_n1ql.c54b2c4a.chunk.js +2 -0
  320. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_n1ql.c54b2c4a.chunk.js.map +1 -0
  321. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_nginx.630147e0.chunk.js +2 -0
  322. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_nginx.630147e0.chunk.js.map +1 -0
  323. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_nim.17afaed1.chunk.js +2 -0
  324. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_nim.17afaed1.chunk.js.map +1 -0
  325. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_nix.245f31b6.chunk.js +2 -0
  326. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_nix.245f31b6.chunk.js.map +1 -0
  327. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_nodeRepl.5b05cdf2.chunk.js +2 -0
  328. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_nodeRepl.5b05cdf2.chunk.js.map +1 -0
  329. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_nsis.4934a8e8.chunk.js +2 -0
  330. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_nsis.4934a8e8.chunk.js.map +1 -0
  331. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_objectivec.2d204375.chunk.js +2 -0
  332. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_objectivec.2d204375.chunk.js.map +1 -0
  333. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_ocaml.0e42541e.chunk.js +2 -0
  334. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_ocaml.0e42541e.chunk.js.map +1 -0
  335. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_oneC.362a3b0a.chunk.js +2 -0
  336. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_oneC.362a3b0a.chunk.js.map +1 -0
  337. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_openscad.4a460eaf.chunk.js +2 -0
  338. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_openscad.4a460eaf.chunk.js.map +1 -0
  339. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_oxygene.ea742315.chunk.js +2 -0
  340. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_oxygene.ea742315.chunk.js.map +1 -0
  341. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_parser3.706a4bd6.chunk.js +2 -0
  342. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_parser3.706a4bd6.chunk.js.map +1 -0
  343. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_perl.ae8475a2.chunk.js +2 -0
  344. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_perl.ae8475a2.chunk.js.map +1 -0
  345. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_pf.5052a768.chunk.js +2 -0
  346. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_pf.5052a768.chunk.js.map +1 -0
  347. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_pgsql.5b0d21b9.chunk.js +2 -0
  348. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_pgsql.5b0d21b9.chunk.js.map +1 -0
  349. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_php.ade4c6c4.chunk.js +2 -0
  350. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_php.ade4c6c4.chunk.js.map +1 -0
  351. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_phpTemplate.2bd36dc7.chunk.js +2 -0
  352. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_phpTemplate.2bd36dc7.chunk.js.map +1 -0
  353. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_plaintext.25f8d292.chunk.js +2 -0
  354. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_plaintext.25f8d292.chunk.js.map +1 -0
  355. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_pony.1961f69f.chunk.js +2 -0
  356. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_pony.1961f69f.chunk.js.map +1 -0
  357. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_powershell.7bd31b3a.chunk.js +2 -0
  358. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_powershell.7bd31b3a.chunk.js.map +1 -0
  359. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_processing.8d1f48c5.chunk.js +2 -0
  360. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_processing.8d1f48c5.chunk.js.map +1 -0
  361. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_profile.615fa721.chunk.js +2 -0
  362. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_profile.615fa721.chunk.js.map +1 -0
  363. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_prolog.be0fdf0c.chunk.js +2 -0
  364. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_prolog.be0fdf0c.chunk.js.map +1 -0
  365. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_properties.60f97895.chunk.js +2 -0
  366. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_properties.60f97895.chunk.js.map +1 -0
  367. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_protobuf.0cd375bc.chunk.js +2 -0
  368. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_protobuf.0cd375bc.chunk.js.map +1 -0
  369. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_puppet.ee3f80da.chunk.js +2 -0
  370. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_puppet.ee3f80da.chunk.js.map +1 -0
  371. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_purebasic.08443005.chunk.js +2 -0
  372. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_purebasic.08443005.chunk.js.map +1 -0
  373. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_python.9e4100ae.chunk.js +2 -0
  374. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_python.9e4100ae.chunk.js.map +1 -0
  375. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_pythonRepl.feb72aed.chunk.js +2 -0
  376. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_pythonRepl.feb72aed.chunk.js.map +1 -0
  377. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_q.989943de.chunk.js +2 -0
  378. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_q.989943de.chunk.js.map +1 -0
  379. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_qml.8f3a0af6.chunk.js +2 -0
  380. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_qml.8f3a0af6.chunk.js.map +1 -0
  381. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_r.8540ccea.chunk.js +2 -0
  382. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_r.8540ccea.chunk.js.map +1 -0
  383. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_reasonml.a5a73a29.chunk.js +2 -0
  384. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_reasonml.a5a73a29.chunk.js.map +1 -0
  385. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_rib.dc8afdf1.chunk.js +2 -0
  386. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_rib.dc8afdf1.chunk.js.map +1 -0
  387. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_roboconf.47518214.chunk.js +2 -0
  388. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_roboconf.47518214.chunk.js.map +1 -0
  389. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_routeros.c0bcd6ce.chunk.js +2 -0
  390. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_routeros.c0bcd6ce.chunk.js.map +1 -0
  391. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_rsl.909f2a27.chunk.js +2 -0
  392. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_rsl.909f2a27.chunk.js.map +1 -0
  393. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_ruby.d84064e5.chunk.js +2 -0
  394. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_ruby.d84064e5.chunk.js.map +1 -0
  395. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_ruleslanguage.038504d0.chunk.js +2 -0
  396. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_ruleslanguage.038504d0.chunk.js.map +1 -0
  397. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_rust.7e26e901.chunk.js +2 -0
  398. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_rust.7e26e901.chunk.js.map +1 -0
  399. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_sas.94075d6a.chunk.js +2 -0
  400. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_sas.94075d6a.chunk.js.map +1 -0
  401. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_scala.a4629d0a.chunk.js +2 -0
  402. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_scala.a4629d0a.chunk.js.map +1 -0
  403. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_scheme.508b5846.chunk.js +2 -0
  404. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_scheme.508b5846.chunk.js.map +1 -0
  405. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_scilab.bb9cc730.chunk.js +2 -0
  406. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_scilab.bb9cc730.chunk.js.map +1 -0
  407. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_scss.bec19089.chunk.js +2 -0
  408. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_scss.bec19089.chunk.js.map +1 -0
  409. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_shell.9bbc16eb.chunk.js +2 -0
  410. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_shell.9bbc16eb.chunk.js.map +1 -0
  411. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_smali.4fa5afdd.chunk.js +2 -0
  412. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_smali.4fa5afdd.chunk.js.map +1 -0
  413. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_smalltalk.53da57ca.chunk.js +2 -0
  414. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_smalltalk.53da57ca.chunk.js.map +1 -0
  415. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_sml.0e45c1cf.chunk.js +2 -0
  416. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_sml.0e45c1cf.chunk.js.map +1 -0
  417. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_sqf.43421810.chunk.js +2 -0
  418. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_sqf.43421810.chunk.js.map +1 -0
  419. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_sql.651dcc8d.chunk.js +2 -0
  420. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_sql.651dcc8d.chunk.js.map +1 -0
  421. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_sqlMore.d69b1825.chunk.js +2 -0
  422. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_sqlMore.d69b1825.chunk.js.map +1 -0
  423. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_stan.17155e77.chunk.js +2 -0
  424. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_stan.17155e77.chunk.js.map +1 -0
  425. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_stata.fe81a7fc.chunk.js +2 -0
  426. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_stata.fe81a7fc.chunk.js.map +1 -0
  427. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_step21.a431b2db.chunk.js +2 -0
  428. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_step21.a431b2db.chunk.js.map +1 -0
  429. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_stylus.cde06cf5.chunk.js +2 -0
  430. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_stylus.cde06cf5.chunk.js.map +1 -0
  431. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_subunit.c5ac3a0a.chunk.js +2 -0
  432. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_subunit.c5ac3a0a.chunk.js.map +1 -0
  433. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_swift.7d33a4a9.chunk.js +2 -0
  434. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_swift.7d33a4a9.chunk.js.map +1 -0
  435. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_taggerscript.695a2547.chunk.js +2 -0
  436. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_taggerscript.695a2547.chunk.js.map +1 -0
  437. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_tap.402e473f.chunk.js +2 -0
  438. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_tap.402e473f.chunk.js.map +1 -0
  439. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_tcl.79af288c.chunk.js +2 -0
  440. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_tcl.79af288c.chunk.js.map +1 -0
  441. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_thrift.ecb04f2a.chunk.js +2 -0
  442. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_thrift.ecb04f2a.chunk.js.map +1 -0
  443. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_tp.0f4ff415.chunk.js +2 -0
  444. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_tp.0f4ff415.chunk.js.map +1 -0
  445. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_twig.5cb0fdfc.chunk.js +2 -0
  446. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_twig.5cb0fdfc.chunk.js.map +1 -0
  447. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_typescript.cf576f17.chunk.js +2 -0
  448. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_typescript.cf576f17.chunk.js.map +1 -0
  449. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_vala.843d9bc4.chunk.js +2 -0
  450. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_vala.843d9bc4.chunk.js.map +1 -0
  451. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_vbnet.21c190ed.chunk.js +2 -0
  452. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_vbnet.21c190ed.chunk.js.map +1 -0
  453. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_vbscript.4703f4c5.chunk.js +2 -0
  454. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_vbscript.4703f4c5.chunk.js.map +1 -0
  455. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_vbscriptHtml.42eb54af.chunk.js +2 -0
  456. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_vbscriptHtml.42eb54af.chunk.js.map +1 -0
  457. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_verilog.e32adbeb.chunk.js +2 -0
  458. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_verilog.e32adbeb.chunk.js.map +1 -0
  459. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_vhdl.dea9db6c.chunk.js +2 -0
  460. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_vhdl.dea9db6c.chunk.js.map +1 -0
  461. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_vim.e82f126f.chunk.js +2 -0
  462. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_vim.e82f126f.chunk.js.map +1 -0
  463. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_x86asm.217c56f0.chunk.js +2 -0
  464. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_x86asm.217c56f0.chunk.js.map +1 -0
  465. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_xl.7cff3cbb.chunk.js +2 -0
  466. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_xl.7cff3cbb.chunk.js.map +1 -0
  467. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_xml.ee14d6a4.chunk.js +2 -0
  468. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_xml.ee14d6a4.chunk.js.map +1 -0
  469. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_xquery.353780d4.chunk.js +2 -0
  470. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_xquery.353780d4.chunk.js.map +1 -0
  471. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_yaml.2aae489e.chunk.js +2 -0
  472. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_yaml.2aae489e.chunk.js.map +1 -0
  473. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_zephir.fc94a148.chunk.js +2 -0
  474. package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_zephir.fc94a148.chunk.js.map +1 -0
  475. package/package.json +7 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static/7601.08d8ff3f.chunk.js","mappings":"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","sources":["webpack://internal.plugin-kuadrant/../../node_modules/@backstage/core-components/node_modules/@backstage/core-plugin-api/dist/analytics/AnalyticsContext.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@backstage/core-components/node_modules/@backstage/core-plugin-api/dist/apis/system/useApi.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@backstage/core-components/node_modules/@backstage/core-plugin-api/dist/apis/system/ApiRef.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@backstage/core-components/node_modules/@backstage/core-plugin-api/dist/apis/definitions/AnalyticsApi.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@backstage/core-components/node_modules/@backstage/core-plugin-api/dist/analytics/Tracker.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@backstage/core-components/node_modules/@backstage/core-plugin-api/dist/analytics/useAnalytics.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@backstage/core-components/node_modules/@backstage/core-plugin-api/dist/apis/system/helpers.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@backstage/core-components/node_modules/@backstage/core-plugin-api/dist/apis/definitions/auth.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@backstage/core-components/node_modules/@backstage/core-plugin-api/dist/apis/definitions/AlertApi.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@backstage/core-components/node_modules/@backstage/core-plugin-api/dist/apis/definitions/AppThemeApi.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@backstage/core-components/node_modules/@backstage/core-plugin-api/dist/apis/definitions/ConfigApi.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@backstage/core-components/node_modules/@backstage/core-plugin-api/dist/apis/definitions/DiscoveryApi.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@backstage/core-components/node_modules/@backstage/core-plugin-api/dist/apis/definitions/ErrorApi.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@backstage/core-components/node_modules/@backstage/core-plugin-api/dist/apis/definitions/FeatureFlagsApi.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@backstage/core-components/node_modules/@backstage/core-plugin-api/dist/apis/definitions/FetchApi.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@backstage/core-components/node_modules/@backstage/core-plugin-api/dist/apis/definitions/IdentityApi.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@backstage/core-components/node_modules/@backstage/core-plugin-api/dist/apis/definitions/OAuthRequestApi.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@backstage/core-components/node_modules/@backstage/core-plugin-api/dist/apis/definitions/StorageApi.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@backstage/core-components/node_modules/@backstage/core-plugin-api/dist/app/useApp.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@backstage/core-components/node_modules/@backstage/core-plugin-api/dist/extensions/componentData.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@backstage/core-components/node_modules/@backstage/core-plugin-api/dist/routing/useRouteRef.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@backstage/core-components/node_modules/@backstage/core-plugin-api/dist/extensions/PluginErrorBoundary.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@backstage/core-components/node_modules/@backstage/core-plugin-api/dist/extensions/extensions.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@backstage/core-components/node_modules/@backstage/core-plugin-api/dist/extensions/useElementFilter.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@backstage/core-components/node_modules/@backstage/core-plugin-api/dist/plugin/Plugin.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@backstage/core-components/node_modules/@backstage/core-plugin-api/dist/routing/types.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@backstage/core-components/node_modules/@backstage/core-plugin-api/dist/routing/RouteRef.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@backstage/core-components/node_modules/@backstage/core-plugin-api/dist/routing/SubRouteRef.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@backstage/core-components/node_modules/@backstage/core-plugin-api/dist/routing/ExternalRouteRef.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@backstage/core-components/node_modules/@backstage/core-plugin-api/dist/routing/useRouteRefParams.esm.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 { jsx } from 'react/jsx-runtime';\nimport { useVersionedContext } from '@backstage/version-bridge';\nimport { NotImplementedError } from '@backstage/errors';\n\nfunction useApiHolder() {\n const versionedHolder = useVersionedContext(\"api-context\");\n if (!versionedHolder) {\n throw new NotImplementedError(\"API context is not available\");\n }\n const apiHolder = versionedHolder.atVersion(1);\n if (!apiHolder) {\n throw new NotImplementedError(\"ApiContext v1 not available\");\n }\n return apiHolder;\n}\nfunction useApi(apiRef) {\n const apiHolder = useApiHolder();\n const api = apiHolder.get(apiRef);\n if (!api) {\n throw new NotImplementedError(`No implementation available for ${apiRef}`);\n }\n return api;\n}\nfunction withApis(apis) {\n return function withApisWrapper(WrappedComponent) {\n const Hoc = (props) => {\n const apiHolder = useApiHolder();\n const impls = {};\n for (const key in apis) {\n if (apis.hasOwnProperty(key)) {\n const ref = apis[key];\n const api = apiHolder.get(ref);\n if (!api) {\n throw new NotImplementedError(\n `No implementation available for ${ref}`\n );\n }\n impls[key] = api;\n }\n }\n return /* @__PURE__ */ jsx(WrappedComponent, { ...props, ...impls });\n };\n const displayName = WrappedComponent.displayName || WrappedComponent.name || \"Component\";\n Hoc.displayName = `withApis(${displayName})`;\n return Hoc;\n };\n}\n\nexport { useApi, useApiHolder, withApis };\n//# sourceMappingURL=useApi.esm.js.map\n","class ApiRefImpl {\n constructor(config) {\n this.config = config;\n const valid = config.id.split(\".\").flatMap((part) => part.split(\"-\")).every((part) => part.match(/^[a-z][a-z0-9]*$/));\n if (!valid) {\n throw new Error(\n `API id must only contain period separated lowercase alphanum tokens with dashes, got '${config.id}'`\n );\n }\n }\n get id() {\n return this.config.id;\n }\n // Utility for getting type of an api, using `typeof apiRef.T`\n get T() {\n throw new Error(`tried to read ApiRef.T of ${this}`);\n }\n toString() {\n return `apiRef{${this.config.id}}`;\n }\n}\nfunction createApiRef(config) {\n return new ApiRefImpl(config);\n}\n\nexport { createApiRef };\n//# sourceMappingURL=ApiRef.esm.js.map\n","import 'react/jsx-runtime';\nimport '@backstage/version-bridge';\nimport '@backstage/errors';\nimport { createApiRef } from '../system/ApiRef.esm.js';\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 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 '../apis/system/useApi.esm.js';\nimport '../apis/definitions/auth.esm.js';\nimport '../apis/definitions/AlertApi.esm.js';\nimport { analyticsApiRef } from '../apis/definitions/AnalyticsApi.esm.js';\nimport '../apis/definitions/AppThemeApi.esm.js';\nimport '../apis/definitions/ConfigApi.esm.js';\nimport '../apis/definitions/DiscoveryApi.esm.js';\nimport '../apis/definitions/ErrorApi.esm.js';\nimport '../apis/definitions/FeatureFlagsApi.esm.js';\nimport '../apis/definitions/FetchApi.esm.js';\nimport '../apis/definitions/IdentityApi.esm.js';\nimport '../apis/definitions/OAuthRequestApi.esm.js';\nimport '../apis/definitions/StorageApi.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","function createApiFactory(factory, instance) {\n if (\"id\" in factory) {\n return {\n api: factory,\n deps: {},\n factory: () => instance\n };\n }\n return factory;\n}\n\nexport { createApiFactory };\n//# sourceMappingURL=helpers.esm.js.map\n","import 'react/jsx-runtime';\nimport '@backstage/version-bridge';\nimport '@backstage/errors';\nimport { createApiRef } from '../system/ApiRef.esm.js';\n\nvar SessionState = /* @__PURE__ */ ((SessionState2) => {\n SessionState2[\"SignedIn\"] = \"SignedIn\";\n SessionState2[\"SignedOut\"] = \"SignedOut\";\n return SessionState2;\n})(SessionState || {});\nconst googleAuthApiRef = createApiRef({\n id: \"core.auth.google\"\n});\nconst githubAuthApiRef = createApiRef({\n id: \"core.auth.github\"\n});\nconst oktaAuthApiRef = createApiRef({\n id: \"core.auth.okta\"\n});\nconst gitlabAuthApiRef = createApiRef({\n id: \"core.auth.gitlab\"\n});\nconst microsoftAuthApiRef = createApiRef({\n id: \"core.auth.microsoft\"\n});\nconst oneloginAuthApiRef = createApiRef({\n id: \"core.auth.onelogin\"\n});\nconst bitbucketAuthApiRef = createApiRef({\n id: \"core.auth.bitbucket\"\n});\nconst bitbucketServerAuthApiRef = createApiRef({\n id: \"core.auth.bitbucket-server\"\n});\nconst atlassianAuthApiRef = createApiRef({\n id: \"core.auth.atlassian\"\n});\nconst vmwareCloudAuthApiRef = createApiRef({\n id: \"core.auth.vmware-cloud\"\n});\nconst openshiftAuthApiRef = createApiRef({\n id: \"core.auth.openshift\"\n});\n\nexport { SessionState, atlassianAuthApiRef, bitbucketAuthApiRef, bitbucketServerAuthApiRef, githubAuthApiRef, gitlabAuthApiRef, googleAuthApiRef, microsoftAuthApiRef, oktaAuthApiRef, oneloginAuthApiRef, openshiftAuthApiRef, vmwareCloudAuthApiRef };\n//# sourceMappingURL=auth.esm.js.map\n","import 'react/jsx-runtime';\nimport '@backstage/version-bridge';\nimport '@backstage/errors';\nimport { createApiRef } from '../system/ApiRef.esm.js';\n\nconst alertApiRef = createApiRef({\n id: \"core.alert\"\n});\n\nexport { alertApiRef };\n//# sourceMappingURL=AlertApi.esm.js.map\n","import 'react/jsx-runtime';\nimport '@backstage/version-bridge';\nimport '@backstage/errors';\nimport { createApiRef } from '../system/ApiRef.esm.js';\n\nconst appThemeApiRef = createApiRef({\n id: \"core.apptheme\"\n});\n\nexport { appThemeApiRef };\n//# sourceMappingURL=AppThemeApi.esm.js.map\n","import 'react/jsx-runtime';\nimport '@backstage/version-bridge';\nimport '@backstage/errors';\nimport { createApiRef } from '../system/ApiRef.esm.js';\n\nconst configApiRef = createApiRef({\n id: \"core.config\"\n});\n\nexport { configApiRef };\n//# sourceMappingURL=ConfigApi.esm.js.map\n","import 'react/jsx-runtime';\nimport '@backstage/version-bridge';\nimport '@backstage/errors';\nimport { createApiRef } from '../system/ApiRef.esm.js';\n\nconst discoveryApiRef = createApiRef({\n id: \"core.discovery\"\n});\n\nexport { discoveryApiRef };\n//# sourceMappingURL=DiscoveryApi.esm.js.map\n","import 'react/jsx-runtime';\nimport '@backstage/version-bridge';\nimport '@backstage/errors';\nimport { createApiRef } from '../system/ApiRef.esm.js';\n\nconst errorApiRef = createApiRef({\n id: \"core.error\"\n});\n\nexport { errorApiRef };\n//# sourceMappingURL=ErrorApi.esm.js.map\n","import 'react/jsx-runtime';\nimport '@backstage/version-bridge';\nimport '@backstage/errors';\nimport { createApiRef } from '../system/ApiRef.esm.js';\n\nvar FeatureFlagState = /* @__PURE__ */ ((FeatureFlagState2) => {\n FeatureFlagState2[FeatureFlagState2[\"None\"] = 0] = \"None\";\n FeatureFlagState2[FeatureFlagState2[\"Active\"] = 1] = \"Active\";\n return FeatureFlagState2;\n})(FeatureFlagState || {});\nconst featureFlagsApiRef = createApiRef({\n id: \"core.featureflags\"\n});\n\nexport { FeatureFlagState, featureFlagsApiRef };\n//# sourceMappingURL=FeatureFlagsApi.esm.js.map\n","import 'react/jsx-runtime';\nimport '@backstage/version-bridge';\nimport '@backstage/errors';\nimport { createApiRef } from '../system/ApiRef.esm.js';\n\nconst fetchApiRef = createApiRef({\n id: \"core.fetch\"\n});\n\nexport { fetchApiRef };\n//# sourceMappingURL=FetchApi.esm.js.map\n","import 'react/jsx-runtime';\nimport '@backstage/version-bridge';\nimport '@backstage/errors';\nimport { createApiRef } from '../system/ApiRef.esm.js';\n\nconst identityApiRef = createApiRef({\n id: \"core.identity\"\n});\n\nexport { identityApiRef };\n//# sourceMappingURL=IdentityApi.esm.js.map\n","import 'react/jsx-runtime';\nimport '@backstage/version-bridge';\nimport '@backstage/errors';\nimport { createApiRef } from '../system/ApiRef.esm.js';\n\nconst oauthRequestApiRef = createApiRef({\n id: \"core.oauthrequest\"\n});\n\nexport { oauthRequestApiRef };\n//# sourceMappingURL=OAuthRequestApi.esm.js.map\n","import 'react/jsx-runtime';\nimport '@backstage/version-bridge';\nimport '@backstage/errors';\nimport { createApiRef } from '../system/ApiRef.esm.js';\n\nconst storageApiRef = createApiRef({\n id: \"core.storage\"\n});\n\nexport { storageApiRef };\n//# sourceMappingURL=StorageApi.esm.js.map\n","import { useVersionedContext } from '@backstage/version-bridge';\n\nconst useApp = () => {\n const versionedContext = useVersionedContext(\n \"app-context\"\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';\n\nfunction useRouteRef(routeRef) {\n const { pathname } = useLocation();\n const versionedContext = useVersionedContext(\n \"routing-context\"\n );\n if (!versionedContext) {\n throw new Error(\"Routing context is not available\");\n }\n const resolver = versionedContext.atVersion(1);\n const routeFunc = useMemo(\n () => resolver && resolver.resolve(routeRef, { pathname }),\n [resolver, routeRef, pathname]\n );\n if (!versionedContext) {\n throw new Error(\"useRouteRef used outside of routing context\");\n }\n if (!resolver) {\n throw new Error(\"RoutingContext v1 not available\");\n }\n const isOptional = \"optional\" in routeRef && routeRef.optional;\n if (!routeFunc && !isOptional) {\n throw new Error(`No path for ${routeRef}`);\n }\n return routeFunc;\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 } from '../apis/system/useApi.esm.js';\nimport '../apis/definitions/auth.esm.js';\nimport '../apis/definitions/AlertApi.esm.js';\nimport '../apis/definitions/AnalyticsApi.esm.js';\nimport '../apis/definitions/AppThemeApi.esm.js';\nimport '../apis/definitions/ConfigApi.esm.js';\nimport '../apis/definitions/DiscoveryApi.esm.js';\nimport '../apis/definitions/ErrorApi.esm.js';\nimport { featureFlagsApiRef } from '../apis/definitions/FeatureFlagsApi.esm.js';\nimport '../apis/definitions/FetchApi.esm.js';\nimport '../apis/definitions/IdentityApi.esm.js';\nimport '../apis/definitions/OAuthRequestApi.esm.js';\nimport '../apis/definitions/StorageApi.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 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 () => 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 constructor(id, params) {\n this.id = id;\n this.params = params;\n }\n [routeRefType] = \"absolute\";\n get title() {\n return this.id;\n }\n toString() {\n return `routeRef{type=absolute,id=${this.id}}`;\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 constructor(id, path, parent, params) {\n this.id = id;\n this.path = path;\n this.parent = parent;\n this.params = params;\n }\n [routeRefType] = \"sub\";\n toString() {\n return `routeRef{type=sub,id=${this.id}}`;\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 constructor(id, params, optional, defaultTarget) {\n this.id = id;\n this.params = params;\n this.optional = optional;\n this.defaultTarget = defaultTarget;\n }\n [routeRefType] = \"external\";\n toString() {\n return `routeRef{type=external,id=${this.id}}`;\n }\n getDefaultTarget() {\n return this.defaultTarget;\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"],"names":["AnalyticsReactContext","createVersionedContext","useAnalyticsContext","theContext","useContext","routeRef","pluginId","extension","theValue","atVersion","Error","AnalyticsContext","options","attributes","children","combinedValue","versionedCombinedValue","createVersionedValueMap","jsx","Provider","value","useApiHolder","versionedHolder","useVersionedContext","apiHolder","useApi","apiRef","api","get","withApis","apis","WrappedComponent","Hoc","props","impls","key","hasOwnProperty","ref","displayName","name","ApiRefImpl","constructor","config","this","id","split","flatMap","part","every","match","T","toString","createApiRef","analyticsApiRef","globalEvents","getOrCreateGlobalSingleton","mostRecentGatheredNavigation","mostRecentRoutableExtensionRender","beforeUnloadRegistered","routableExtensionRenderedEvent","Tracker","analyticsApi","context","addEventListener","captureEvent","once","passive","setContext","action","subject","_routeNodeType","e","console","warn","useAnalytics","trackerRef","useRef","useAnalyticsApi","tracker","current","createApiFactory","factory","instance","deps","SessionState","SessionState2","googleAuthApiRef","githubAuthApiRef","oktaAuthApiRef","gitlabAuthApiRef","microsoftAuthApiRef","oneloginAuthApiRef","bitbucketAuthApiRef","bitbucketServerAuthApiRef","atlassianAuthApiRef","vmwareCloudAuthApiRef","openshiftAuthApiRef","alertApiRef","appThemeApiRef","configApiRef","discoveryApiRef","errorApiRef","FeatureFlagState","FeatureFlagState2","featureFlagsApiRef","fetchApiRef","identityApiRef","oauthRequestApiRef","storageApiRef","useApp","versionedContext","appContext","globalStore","WeakMap","componentDataKey","attachComponentData","component","type","data","dataComponent","container","map","Map","Object","defineProperty","enumerable","configurable","writable","set","has","getComponentData","node","useRouteRef","pathname","useLocation","resolver","routeFunc","useMemo","resolve","isOptional","optional","PluginErrorBoundary","Component","getDerivedStateFromError","error","state","handleErrorReset","setState","render","app","plugin","ErrorBoundaryFallback","getComponents","resetError","createRoutableExtension","mountPoint","createReactExtension","lazy","then","InnerComponent","RoutableExtensionWrapper","analytics","message","startsWith","useEffect","componentName","createComponentExtension","lazyLoader","default","ofExtension","sync","expose","Result","Progress","Suspense","fallback","getId","entries","selectChildren","rootNode","featureFlagsApi","selector","strictError","Children","toArray","isValidElement","Fragment","isActive","with","without","Collection","selectByComponentData","query","selection","withStrictError","findComponentData","filter","getElements","useElementFilter","filterFn","dependencies","elements","PluginImpl","getApis","getFeatureFlags","featureFlags","slice","routes","externalRoutes","provide","createPlugin","routeRefType","Symbol","RouteRefImpl","params","title","createRouteRef","PARAM_PATTERN","SubRouteRefImpl","path","parent","createSubRouteRef","pathParams","p","substring","some","includes","endsWith","param","test","ExternalRouteRefImpl","defaultTarget","getDefaultTarget","createExternalRouteRef","Boolean","useRouteRefParams","_routeRef","useParams"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunkinternal_plugin_kuadrant=self.webpackChunkinternal_plugin_kuadrant||[]).push([[7632],{95251:(e,a,t)=>{t.r(a),t.d(a,{KuadrantPage:()=>G});var l=t(31085),s=t(95478),n=t.n(s),r=t(67720),i=t(10394),o=t(29365),d=t(72501),c=t(42899),u=t(64947),m=t(76891),p=t(61477),h=t(46805),x=t(59461),A=t(93453),v=t(18466),g=t(39590),j=t(75625),f=t(37725),y=t(25010),b=t(289),P=t(55639),S=t(45210),k=t(46681),C=t(86687),w=t(42367),T=t(96040),R=t(91638),I=t(22097),$=t(16281),N=t(71677),W=t(31653),D=t(38605),M=t(32269),z=t(61524);const E=()=>{const e=(0,I.useApi)(I.configApiRef),a=(0,I.useApi)(I.fetchApiRef),t=(0,I.useApi)(I.identityApiRef),n=e.getString("backend.baseUrl"),[c,u]=(0,s.useState)(0),[,m]=(0,s.useState)(""),[p,h]=(0,s.useState)(new Set);(0,R.A)(async()=>{const e=await t.getBackstageIdentity();m(e.userEntityRef.split("/")[1]||"guest")},[t]);const{value:x,loading:A,error:v}=(0,R.A)(async()=>{const e=await a.fetch(`${n}/api/kuadrant/requests/my`);if(!e.ok)throw new Error("failed to fetch requests");return(await e.json()).items||[]},[n,a]);if(A)return(0,l.jsx)(T.n,{title:"My API Keys",children:(0,l.jsx)(d.A,{children:"Loading..."})});if(v)return(0,l.jsx)(T.n,{title:"My API Keys",children:(0,l.jsxs)(d.A,{color:"error",children:["Error loading API keys: ",v.message]})});const g=x||[],j=g.filter(e=>{var a;return"Approved"===(null===(a=e.status)||void 0===a?void 0:a.phase)}),b=g.filter(e=>{var a;return!(null===(a=e.status)||void 0===a?void 0:a.phase)||"Pending"===e.status.phase}),P=g.filter(e=>{var a;return"Rejected"===(null===(a=e.status)||void 0===a?void 0:a.phase)}),S=[{title:"API Product",field:"spec.apiName",render:e=>(0,l.jsx)(f.N_,{to:`/catalog/default/api/${e.spec.apiName}/api-keys`,children:(0,l.jsx)("strong",{children:e.spec.apiName})})},{title:"Plan",field:"spec.planTier",render:e=>{const a="gold"===e.spec.planTier?"primary":"silver"===e.spec.planTier?"default":"secondary";return(0,l.jsx)(r.A,{label:e.spec.planTier,color:a,size:"small"})}},{title:"Use Case",field:"spec.useCase",render:e=>(0,l.jsx)(d.A,{variant:"body2",children:e.spec.useCase||"-"})},{title:"Status",field:"status.phase",render:e=>{var a;const t=(null===(a=e.status)||void 0===a?void 0:a.phase)||"Pending",s="Approved"===t?"primary":"Rejected"===t?"secondary":"default";return(0,l.jsx)(r.A,{label:t,color:s,size:"small"})}},{title:"Reason",render:e=>{var a;return"Rejected"===(null===(a=e.status)||void 0===a?void 0:a.phase)&&e.status.reason?(0,l.jsx)(d.A,{variant:"body2",color:"error",children:e.status.reason}):(0,l.jsx)(d.A,{variant:"body2",color:"textSecondary",children:"-"})}},{title:"Reviewed By",render:e=>{var a,t;if(("Approved"===(null===(a=e.status)||void 0===a?void 0:a.phase)||"Rejected"===(null===(t=e.status)||void 0===t?void 0:t.phase))&&e.status.reviewedBy){const a=e.status.reviewedAt?new Date(e.status.reviewedAt).toLocaleDateString():"";return(0,l.jsxs)(i.A,{children:[(0,l.jsx)(d.A,{variant:"body2",children:e.status.reviewedBy}),a&&(0,l.jsx)(d.A,{variant:"caption",color:"textSecondary",children:a})]})}return(0,l.jsx)(d.A,{variant:"body2",color:"textSecondary",children:"-"})}},{title:"API Key",render:e=>{var a;if("Approved"===(null===(a=e.status)||void 0===a?void 0:a.phase)&&e.status.apiKey){const a=p.has(e.metadata.name);return(0,l.jsxs)(i.A,{display:"flex",alignItems:"center",style:{gap:8},children:[(0,l.jsx)(i.A,{fontFamily:"monospace",fontSize:"0.875rem",children:a?e.status.apiKey:"•".repeat(20)+"..."}),(0,l.jsx)(N.Ay,{title:a?"hide key":"show key",children:(0,l.jsx)(o.A,{size:"small",onClick:()=>{return a=e.metadata.name,void h(e=>{const t=new Set(e);return t.has(a)?t.delete(a):t.add(a),t});var a},children:a?(0,l.jsx)(z.A,{fontSize:"small"}):(0,l.jsx)(M.A,{fontSize:"small"})})})]})}return(0,l.jsx)(d.A,{variant:"body2",color:"textSecondary",children:"-"})}},{title:"Requested",field:"metadata.creationTimestamp",render:e=>new Date(e.metadata.creationTimestamp).toLocaleDateString()}],k=(()=>{switch(c){case 0:return j;case 1:return b;case 2:return P;default:return g}})();return(0,l.jsxs)(T.n,{title:"My API Keys",subheader:`${j.length} active, ${b.length} pending`,children:[(0,l.jsx)(i.A,{mb:2,children:(0,l.jsxs)(W.A,{value:c,onChange:(e,a)=>u(a),indicatorColor:"primary",textColor:"primary",children:[(0,l.jsx)(D.A,{label:`Active (${j.length})`}),(0,l.jsx)(D.A,{label:`Pending (${b.length})`}),(0,l.jsx)(D.A,{label:`Rejected (${P.length})`})]})}),0===k.length?(0,l.jsx)(i.A,{p:3,textAlign:"center",children:(0,l.jsxs)(d.A,{variant:"body1",color:"textSecondary",children:[0===c&&"No active API keys. Request access to an API to get started.",1===c&&"No pending requests.",2===c&&"No rejected requests."]})}):(0,l.jsx)(y.X,{options:{paging:k.length>10,pageSize:10,search:!1,toolbar:!1},columns:S,data:k})]})};var L=t(46205);const q=({children:e,permission:a,fallback:t,errorMessage:s})=>{const{allowed:n,loading:r,error:o}=(0,L.l)(a);return r?(0,l.jsx)(C.k,{}):o?(0,l.jsxs)(i.A,{p:4,children:[(0,l.jsxs)(d.A,{color:"error",children:["Unable to check permissions: ",o.message]}),(0,l.jsx)(d.A,{variant:"body2",color:"textSecondary",children:"Please try again or contact your administrator"})]}):n?(0,l.jsx)(l.Fragment,{children:e}):t?(0,l.jsx)(l.Fragment,{children:t}):(0,l.jsxs)(i.A,{p:4,children:[(0,l.jsx)(d.A,{color:"textSecondary",children:s||"You don't have permission to view this page"}),(0,l.jsx)(i.A,{mt:1,children:(0,l.jsxs)(d.A,{variant:"caption",color:"textSecondary",children:["Required permission: ",a.name]})})]})};var H=t(58837),K=t(16249),U=t(26343),B=t(84441);const F=({selectedPolicy:e,alertSeverity:a="warning",alertMessage:t="No PlanPolicy found for this HTTPRoute. API keys and rate limiting may not be available.",includeTopMargin:s=!0})=>(0,l.jsx)(i.A,{mt:s?1:0,p:2,bgcolor:"#f5f5f5",borderRadius:1,border:"1px solid #e0e0e0",children:e?(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)(d.A,{variant:"subtitle2",gutterBottom:!0,style:{fontWeight:600},children:["Associated PlanPolicy: ",(0,l.jsx)("strong",{children:e.metadata.name})]}),e.plans&&e.plans.length>0?(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(d.A,{variant:"caption",display:"block",gutterBottom:!0,color:"textSecondary",style:{marginTop:8},children:"Available Plans:"}),(0,l.jsx)(i.A,{display:"flex",flexWrap:"wrap",mt:1,style:{gap:8},children:e.plans.map((e,a)=>{var t,s,n;const i=(null===(t=e.limits)||void 0===t?void 0:t.daily)?`${e.limits.daily}/day`:(null===(s=e.limits)||void 0===s?void 0:s.monthly)?`${e.limits.monthly}/month`:(null===(n=e.limits)||void 0===n?void 0:n.yearly)?`${e.limits.yearly}/year`:"No limit";return(0,l.jsx)(r.A,{label:`${e.tier}: ${i}`,size:"small",variant:"outlined",color:"primary"},a)})}),e.plans.some(e=>e.description)&&(0,l.jsx)(i.A,{mt:1,children:e.plans.filter(e=>e.description).map((e,a)=>(0,l.jsxs)(d.A,{variant:"caption",display:"block",color:"textSecondary",children:["• ",(0,l.jsxs)("strong",{children:[e.tier,":"]})," ",e.description]},a))})]}):(0,l.jsx)(d.A,{variant:"caption",color:"textSecondary",children:"No plans defined in this PlanPolicy"})]}):(0,l.jsx)(B.A,{severity:a,children:t})}),_=(0,H.A)({asterisk:{color:"#f44336"}}),V=({open:e,onClose:a,onSuccess:t})=>{const n=_(),o=(0,I.useApi)(I.configApiRef),x=(0,I.useApi)(I.fetchApiRef),v=o.getString("backend.baseUrl"),[g,j]=(0,s.useState)(""),[f,y]=(0,s.useState)(""),[b,P]=(0,s.useState)(""),[S,k]=(0,s.useState)("v1"),[C,w]=(0,s.useState)("manual"),[T,$]=(0,s.useState)("Published"),[N,W]=(0,s.useState)([]),[D,M]=(0,s.useState)(""),[z,E]=(0,s.useState)(""),[L,q]=(0,s.useState)(""),[H,V]=(0,s.useState)(""),[O,Y]=(0,s.useState)(""),[J,X]=(0,s.useState)(""),[G,Q]=(0,s.useState)(""),[Z,ee]=(0,s.useState)(!1),{value:ae,loading:te}=(0,R.A)(async()=>{const e=await x.fetch(`${v}/api/kuadrant/httproutes`);return((await e.json()).items||[]).filter(e=>{var a;return"true"===(null===(a=e.metadata.annotations)||void 0===a?void 0:a["backstage.io/expose"])})},[v,x,e]),{value:le}=(0,R.A)(async()=>{const e=await x.fetch(`${v}/api/kuadrant/planpolicies`);return await e.json()},[v,x,e]),se=z?z.split("/"):null,ne=se?(re=se[0],ie=se[1],(null==le?void 0:le.items)?le.items.find(e=>{const a=e.targetRef;return"HTTPRoute"===(null==a?void 0:a.kind)&&(null==a?void 0:a.name)===ie&&(!(null==a?void 0:a.namespace)||(null==a?void 0:a.namespace)===re)}):null):null;var re,ie;const oe=()=>{D.trim()&&!N.includes(D.trim())&&(W([...N,D.trim()]),M(""))},de=()=>{j(""),y(""),P(""),k("v1"),w("manual"),$("Published"),W([]),M(""),E(""),q(""),V(""),Y(""),X(""),Q(""),a()};return(0,l.jsxs)(m.A,{open:e,onClose:de,maxWidth:"md",fullWidth:!0,children:[(0,l.jsx)(p.A,{children:"Create API Product"}),(0,l.jsxs)(h.A,{children:[G&&(0,l.jsx)(B.A,{severity:"error",style:{marginBottom:16},children:G}),(0,l.jsxs)(c.A,{container:!0,spacing:2,children:[(0,l.jsx)(c.A,{item:!0,xs:6,children:(0,l.jsx)(K.A,{fullWidth:!0,label:"Name",value:g,onChange:e=>j(e.target.value),placeholder:"my-api",helperText:"Kubernetes resource name (lowercase, hyphens)",margin:"normal",required:!0,InputLabelProps:{classes:{asterisk:n.asterisk}}})}),(0,l.jsx)(c.A,{item:!0,xs:6,children:(0,l.jsx)(K.A,{fullWidth:!0,label:"Display Name",value:f,onChange:e=>y(e.target.value),placeholder:"My API",margin:"normal",required:!0,InputLabelProps:{classes:{asterisk:n.asterisk}}})}),(0,l.jsx)(c.A,{item:!0,xs:6,children:(0,l.jsx)(K.A,{fullWidth:!0,label:"Version",value:S,onChange:e=>k(e.target.value),placeholder:"v1",margin:"normal"})}),(0,l.jsx)(c.A,{item:!0,xs:12,children:(0,l.jsxs)(K.A,{fullWidth:!0,select:!0,label:"Approval Mode",value:C,onChange:e=>w(e.target.value),margin:"normal",helperText:"Automatic: keys are created immediately. Manual: requires approval.",children:[(0,l.jsx)(U.A,{value:"manual",children:"Manual"}),(0,l.jsx)(U.A,{value:"automatic",children:"Automatic"})]})}),(0,l.jsx)(c.A,{item:!0,xs:12,children:(0,l.jsxs)(K.A,{fullWidth:!0,select:!0,label:"Publish Status",value:T,onChange:e=>$(e.target.value),margin:"normal",helperText:"Draft: hidden from catalog. Published: visible to consumers.",children:[(0,l.jsx)(U.A,{value:"Draft",children:"Draft"}),(0,l.jsx)(U.A,{value:"Published",children:"Published"})]})}),(0,l.jsx)(c.A,{item:!0,xs:12,children:(0,l.jsx)(K.A,{fullWidth:!0,label:"Description",value:b,onChange:e=>P(e.target.value),placeholder:"API description",margin:"normal",multiline:!0,rows:2,required:!0,InputLabelProps:{classes:{asterisk:n.asterisk}}})}),(0,l.jsxs)(c.A,{item:!0,xs:12,children:[(0,l.jsx)(d.A,{variant:"subtitle2",gutterBottom:!0,style:{marginTop:16},children:"Tags"}),(0,l.jsx)(i.A,{display:"flex",flexWrap:"wrap",marginBottom:1,style:{gap:8},children:N.map(e=>(0,l.jsx)(r.A,{label:e,onDelete:()=>{return a=e,void W(N.filter(e=>e!==a));var a},size:"small"},e))}),(0,l.jsxs)(i.A,{display:"flex",style:{gap:8},children:[(0,l.jsx)(K.A,{fullWidth:!0,size:"small",value:D,onChange:e=>M(e.target.value),onKeyPress:e=>"Enter"===e.key&&oe(),placeholder:"Add tag"}),(0,l.jsx)(u.A,{onClick:oe,variant:"outlined",size:"small",children:"Add"})]})]}),(0,l.jsx)(c.A,{item:!0,xs:12,children:(0,l.jsxs)(K.A,{fullWidth:!0,select:!0,label:"HTTPRoute",value:z,onChange:e=>E(e.target.value),margin:"normal",required:!0,helperText:"Select an HTTPRoute (backstage.io/expose: true). APIProduct will be created in the same namespace.",disabled:te,InputLabelProps:{classes:{asterisk:n.asterisk}},children:[te&&(0,l.jsx)(U.A,{value:"",children:"Loading..."}),!te&&ae&&0===ae.length&&(0,l.jsx)(U.A,{value:"",children:"No HTTPRoutes available"}),!te&&ae&&ae.map(e=>(0,l.jsxs)(U.A,{value:`${e.metadata.namespace}/${e.metadata.name}`,children:[e.metadata.name," (",e.metadata.namespace,")"]},`${e.metadata.namespace}/${e.metadata.name}`))]})}),z&&(0,l.jsx)(c.A,{item:!0,xs:12,children:(0,l.jsx)(F,{selectedPolicy:ne,alertSeverity:"warning",alertMessage:"No PlanPolicy found for this HTTPRoute. API keys and rate limiting may not be available.",includeTopMargin:!0})}),(0,l.jsx)(c.A,{item:!0,xs:6,children:(0,l.jsx)(K.A,{fullWidth:!0,label:"Contact Email",value:L,onChange:e=>q(e.target.value),placeholder:"api-team@example.com",margin:"normal"})}),(0,l.jsx)(c.A,{item:!0,xs:6,children:(0,l.jsx)(K.A,{fullWidth:!0,label:"Contact Team",value:H,onChange:e=>V(e.target.value),placeholder:"platform-team",margin:"normal"})}),(0,l.jsx)(c.A,{item:!0,xs:6,children:(0,l.jsx)(K.A,{fullWidth:!0,label:"Docs URL",value:O,onChange:e=>Y(e.target.value),placeholder:"https://api.example.com/docs",margin:"normal"})}),(0,l.jsx)(c.A,{item:!0,xs:6,children:(0,l.jsx)(K.A,{fullWidth:!0,label:"OpenAPI Spec URL",value:J,onChange:e=>X(e.target.value),placeholder:"https://api.example.com/openapi.json",margin:"normal"})})]})]}),(0,l.jsxs)(A.A,{children:[(0,l.jsx)(u.A,{onClick:de,children:"Cancel"}),(0,l.jsx)(u.A,{onClick:async()=>{Q(""),ee(!0);try{if(!z)throw new Error("Please select an HTTPRoute");const[e,a]=z.split("/"),l={apiVersion:"extensions.kuadrant.io/v1alpha1",kind:"APIProduct",metadata:{name:g,namespace:e},spec:{displayName:f,description:b,version:S,approvalMode:C,publishStatus:T,tags:N,targetRef:{group:"gateway.networking.k8s.io",kind:"HTTPRoute",name:a,namespace:e},...L||H?{contact:{...L&&{email:L},...H&&{team:H}}}:{},...O||J?{documentation:{...O&&{docsURL:O},...J&&{openAPISpec:J}}}:{}}},s=await x.fetch(`${v}/api/kuadrant/apiproducts`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(l)});if(!s.ok){const e=await s.json();throw new Error(e.error||"failed to create apiproduct")}t(),de()}catch(e){Q(e instanceof Error?e.message:String(e))}finally{ee(!1)}},color:"primary",variant:"contained",disabled:Z||!g||!f||!b||!z,children:Z?"Creating...":"Create"})]})]})};var O=t(34955);const Y=(0,H.A)({asterisk:{color:"#f44336"}}),J=({open:e,onClose:a,onSuccess:t,namespace:o,name:x})=>{const v=Y(),g=(0,I.useApi)(I.configApiRef),j=(0,I.useApi)(I.fetchApiRef),f=g.getString("backend.baseUrl"),[y,b]=(0,s.useState)(!1),[P,S]=(0,s.useState)(""),[k,w]=(0,s.useState)(""),[T,$]=(0,s.useState)("v1"),[N,W]=(0,s.useState)("Draft"),[D,M]=(0,s.useState)("manual"),[z,E]=(0,s.useState)([]),[L,q]=(0,s.useState)(null),[H,_]=(0,s.useState)(""),[V,O]=(0,s.useState)(""),[J,X]=(0,s.useState)(""),[G,Q]=(0,s.useState)(""),[Z,ee]=(0,s.useState)(""),[ae,te]=(0,s.useState)(""),[le,se]=(0,s.useState)(!1);(0,s.useEffect)(()=>{e&&o&&x&&(b(!0),te(""),j.fetch(`${f}/api/kuadrant/apiproducts/${o}/${x}`).then(e=>e.json()).then(e=>{var a,t,l,s;S(e.spec.displayName||""),w(e.spec.description||""),$(e.spec.version||"v1"),W(e.spec.publishStatus||"Draft"),M(e.spec.approvalMode||"manual"),E(e.spec.tags||[]),q(e.spec.targetRef||null),O((null===(a=e.spec.contact)||void 0===a?void 0:a.email)||""),X((null===(t=e.spec.contact)||void 0===t?void 0:t.team)||""),Q((null===(l=e.spec.documentation)||void 0===l?void 0:l.docsURL)||""),ee((null===(s=e.spec.documentation)||void 0===s?void 0:s.openAPISpec)||""),b(!1)}).catch(e=>{te(e.message||"Failed to load API Product"),b(!1)}))},[e,o,x,f,j]);const{value:ne}=(0,R.A)(async()=>{if(!e)return null;const a=await j.fetch(`${f}/api/kuadrant/planpolicies`);return await a.json()},[f,j,e]),re=n().useMemo(()=>(null==ne?void 0:ne.items)&&L?ne.items.find(e=>{const a=e.targetRef;return"HTTPRoute"===(null==a?void 0:a.kind)&&(null==a?void 0:a.name)===L.name&&(!(null==a?void 0:a.namespace)||(null==a?void 0:a.namespace)===(L.namespace||o))}):null,[ne,L,o]),ie=()=>{H.trim()&&!z.includes(H.trim())&&(E([...z,H.trim()]),_(""))};return(0,l.jsxs)(m.A,{open:e,onClose:a,maxWidth:"md",fullWidth:!0,children:[(0,l.jsx)(p.A,{children:"Edit API Product"}),(0,l.jsxs)(h.A,{children:[ae&&(0,l.jsx)(B.A,{severity:"error",style:{marginBottom:16},children:ae}),y?(0,l.jsx)(C.k,{}):(0,l.jsxs)(c.A,{container:!0,spacing:2,children:[(0,l.jsx)(c.A,{item:!0,xs:6,children:(0,l.jsx)(K.A,{fullWidth:!0,label:"Name",value:x,disabled:!0,helperText:"Kubernetes resource name (immutable)",margin:"normal"})}),(0,l.jsx)(c.A,{item:!0,xs:6,children:(0,l.jsx)(K.A,{fullWidth:!0,label:"Namespace",value:o,disabled:!0,helperText:"Derived from HTTPRoute (immutable)",margin:"normal"})}),(0,l.jsx)(c.A,{item:!0,xs:6,children:(0,l.jsx)(K.A,{fullWidth:!0,label:"Display Name",value:P,onChange:e=>S(e.target.value),placeholder:"My API",margin:"normal",required:!0,InputLabelProps:{classes:{asterisk:v.asterisk}}})}),(0,l.jsx)(c.A,{item:!0,xs:6,children:(0,l.jsx)(K.A,{fullWidth:!0,label:"Version",value:T,onChange:e=>$(e.target.value),placeholder:"v1",margin:"normal"})}),(0,l.jsx)(c.A,{item:!0,xs:6,children:(0,l.jsxs)(K.A,{fullWidth:!0,select:!0,label:"Publish Status",value:N,onChange:e=>W(e.target.value),margin:"normal",helperText:"Draft: Hidden from catalog. Published: Visible in catalog.",children:[(0,l.jsx)(U.A,{value:"Draft",children:"Draft (Hidden)"}),(0,l.jsx)(U.A,{value:"Published",children:"Published (Visible)"})]})}),(0,l.jsx)(c.A,{item:!0,xs:6,children:(0,l.jsxs)(K.A,{fullWidth:!0,select:!0,label:"Approval Mode",value:D,onChange:e=>M(e.target.value),margin:"normal",helperText:"Automatic: keys created immediately. Manual: requires approval.",children:[(0,l.jsx)(U.A,{value:"manual",children:"Manual"}),(0,l.jsx)(U.A,{value:"automatic",children:"Automatic"})]})}),(0,l.jsx)(c.A,{item:!0,xs:12,children:(0,l.jsx)(K.A,{fullWidth:!0,label:"Description",value:k,onChange:e=>w(e.target.value),placeholder:"API description",margin:"normal",multiline:!0,rows:2,required:!0,InputLabelProps:{classes:{asterisk:v.asterisk}}})}),(0,l.jsxs)(c.A,{item:!0,xs:12,children:[(0,l.jsx)(d.A,{variant:"subtitle2",gutterBottom:!0,style:{marginTop:16},children:"Tags"}),(0,l.jsx)(i.A,{display:"flex",flexWrap:"wrap",marginBottom:1,style:{gap:8},children:z.map(e=>(0,l.jsx)(r.A,{label:e,onDelete:()=>{return a=e,void E(z.filter(e=>e!==a));var a},size:"small"},e))}),(0,l.jsxs)(i.A,{display:"flex",style:{gap:8},children:[(0,l.jsx)(K.A,{fullWidth:!0,size:"small",value:H,onChange:e=>_(e.target.value),onKeyPress:e=>"Enter"===e.key&&ie(),placeholder:"Add tag"}),(0,l.jsx)(u.A,{onClick:ie,variant:"outlined",size:"small",children:"Add"})]})]}),L&&(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(c.A,{item:!0,xs:12,children:(0,l.jsx)(K.A,{fullWidth:!0,label:"HTTPRoute",value:`${L.namespace||o}/${L.name}`,disabled:!0,helperText:"Target HTTPRoute (immutable)",margin:"normal"})}),(0,l.jsx)(c.A,{item:!0,xs:12,children:(0,l.jsx)(F,{selectedPolicy:re,alertSeverity:"info",alertMessage:"No PlanPolicy found for this HTTPRoute.",includeTopMargin:!1})})]}),(0,l.jsx)(c.A,{item:!0,xs:6,children:(0,l.jsx)(K.A,{fullWidth:!0,label:"Contact Email",value:V,onChange:e=>O(e.target.value),placeholder:"api-team@example.com",margin:"normal"})}),(0,l.jsx)(c.A,{item:!0,xs:6,children:(0,l.jsx)(K.A,{fullWidth:!0,label:"Contact Team",value:J,onChange:e=>X(e.target.value),placeholder:"platform-team",margin:"normal"})}),(0,l.jsx)(c.A,{item:!0,xs:6,children:(0,l.jsx)(K.A,{fullWidth:!0,label:"Docs URL",value:G,onChange:e=>Q(e.target.value),placeholder:"https://api.example.com/docs",margin:"normal"})}),(0,l.jsx)(c.A,{item:!0,xs:6,children:(0,l.jsx)(K.A,{fullWidth:!0,label:"OpenAPI Spec URL",value:Z,onChange:e=>ee(e.target.value),placeholder:"https://api.example.com/openapi.json",margin:"normal"})})]})]}),(0,l.jsxs)(A.A,{children:[(0,l.jsx)(u.A,{onClick:a,children:"Cancel"}),(0,l.jsx)(u.A,{onClick:async()=>{te(""),se(!0);try{const e={spec:{displayName:P,description:k,version:T,publishStatus:N,approvalMode:D,tags:z,targetRef:L,...V||J?{contact:{...V&&{email:V},...J&&{team:J}}}:{},...G||Z?{documentation:{...G&&{docsURL:G},...Z&&{openAPISpec:Z}}}:{}}},l=await j.fetch(`${f}/api/kuadrant/apiproducts/${o}/${x}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!l.ok){const e=await l.json();throw new Error(e.error||"failed to update apiproduct")}t(),a()}catch(e){te(e instanceof Error?e.message:String(e))}finally{se(!1)}},color:"primary",variant:"contained",disabled:le||y||!P||!k,children:le?"Saving...":"Save"})]})]})},X=()=>{const e=(0,I.useApi)(I.configApiRef),a=(0,I.useApi)(I.fetchApiRef),t=e.getString("backend.baseUrl"),[n,N]=(0,s.useState)(!1),[W,D]=(0,s.useState)(!1),[M,z]=(0,s.useState)(0),[q,H]=(0,s.useState)(!1),[K,U]=(0,s.useState)(null),[B,F]=(0,s.useState)(null),[_,Y]=(0,s.useState)(!1),{allowed:X,loading:G,error:Q}=(0,L.l)(O.FL),{allowed:Z,loading:ee,error:ae}=(0,L.l)(O.TE),{allowed:te,loading:le,error:se}=(0,L.l)(O.qC),{allowed:ne}=(0,L.l)(O.ib),{allowed:re,loading:ie,error:oe}=(0,L.l)(O.J),{value:de,loading:ce,error:ue}=(0,R.A)(async()=>{const e=await a.fetch(`${t}/api/kuadrant/apiproducts`);return await e.json()},[t,a,M]),{value:me,loading:pe,error:he}=(0,R.A)(async()=>{const e=await a.fetch(`${t}/api/kuadrant/planpolicies`);return await e.json()},[t,a,M]),xe=ce||pe||G||ee||le||ie,Ae=ue||he,ve=Q||ae||se||oe,ge=()=>{H(!1),U(null)},je=[{title:"Name",field:"name",render:e=>{var a;return(0,l.jsx)(f.N_,{to:`/catalog/default/api/${e.metadata.name}/api-product`,children:(0,l.jsx)("strong",{children:(null===(a=e.spec)||void 0===a?void 0:a.displayName)||e.metadata.name})})}},{title:"Resource Name",field:"metadata.name"},{title:"Version",field:"spec.version",render:e=>{var a;return(null===(a=e.spec)||void 0===a?void 0:a.version)||"-"}},{title:"HTTPRoute",field:"spec.targetRef.name",render:e=>{var a,t;return(null===(t=e.spec)||void 0===t||null===(a=t.targetRef)||void 0===a?void 0:a.name)||"-"}},{title:"Publish Status",field:"spec.publishStatus",render:e=>{var a;const t=(null===(a=e.spec)||void 0===a?void 0:a.publishStatus)||"Draft";return(0,l.jsx)(r.A,{label:t,size:"small",color:"Published"===t?"primary":"default"})}},{title:"Namespace",field:"metadata.namespace"},{title:"Created",field:"metadata.creationTimestamp",render:e=>{return a=e.metadata.creationTimestamp,new Date(a).toLocaleDateString("en-GB",{year:"numeric",month:"short",day:"numeric"});var a}},{title:"Actions",field:"actions",render:e=>(0,l.jsxs)(i.A,{display:"flex",style:{gap:4},children:[ne&&(0,l.jsx)(o.A,{size:"small",onClick:()=>{return a=e.metadata.namespace,t=e.metadata.name,F({namespace:a,name:t}),void D(!0);var a,t},title:"Edit API Product",children:(0,l.jsx)(j.A,{fontSize:"small"})}),te&&(0,l.jsx)(o.A,{size:"small",onClick:()=>{return a=e.metadata.namespace,t=e.metadata.name,U({namespace:a,name:t}),void H(!0);var a,t},title:"Delete API Product",children:(0,l.jsx)(g.A,{fontSize:"small"})})]})}],fe=[{title:"Name",field:"metadata.name",render:e=>(0,l.jsx)(f.N_,{to:`/kuadrant/planpolicy/${e.metadata.namespace}/${e.metadata.name}`,children:(0,l.jsx)("strong",{children:e.metadata.name})})},{title:"Namespace",field:"metadata.namespace"}];return(0,l.jsxs)(b.Y,{themeId:"tool",children:[(0,l.jsx)(P.Y,{title:"Kuadrant",subtitle:"API management for Kubernetes",children:(0,l.jsx)(S.Y,{children:"Manage API products and access requests"})}),(0,l.jsxs)(k.U,{children:[xe&&(0,l.jsx)(C.k,{}),Ae&&(0,l.jsx)(w._,{error:Ae}),ve&&(0,l.jsxs)(i.A,{p:2,children:[(0,l.jsxs)(d.A,{color:"error",children:["unable to check permissions: ",ve.message]}),(0,l.jsxs)(d.A,{variant:"body2",color:"textSecondary",children:["permission: ",Q?"kuadrant.apiproduct.create":se?"kuadrant.apiproduct.delete":ae?"kuadrant.apikeyrequest.read.all":oe?"kuadrant.planpolicy.list":"unknown"]}),(0,l.jsx)(d.A,{variant:"body2",color:"textSecondary",children:"please try again or contact your administrator"})]}),!xe&&!Ae&&!ve&&(0,l.jsxs)(c.A,{container:!0,spacing:3,direction:"column",children:[(0,l.jsx)(c.A,{item:!0,children:(0,l.jsx)(E,{})}),(0,l.jsx)(c.A,{item:!0,children:(0,l.jsx)(T.n,{title:"API Products",action:X?(0,l.jsx)(i.A,{display:"flex",alignItems:"center",height:"100%",mt:1,children:(0,l.jsx)(u.A,{variant:"contained",color:"primary",size:"small",startIcon:(0,l.jsx)(v.A,{}),onClick:()=>N(!0),children:"Create API Product"})}):void 0,children:(ye=null==de?void 0:de.items,ye&&0!==ye.length?(0,l.jsx)(y.X,{options:{paging:!1,search:!1,toolbar:!1},columns:je,data:ye}):(0,l.jsx)(d.A,{variant:"body2",color:"textSecondary",children:"No API products found"}))})}),re&&(0,l.jsx)(c.A,{item:!0,children:(0,l.jsx)(T.n,{title:"Plan Policies",children:(e=>e&&0!==e.length?(0,l.jsx)(y.X,{options:{paging:!1,search:!1,toolbar:!1},columns:fe,data:e}):(0,l.jsx)(d.A,{variant:"body2",color:"textSecondary",children:"No plan policies found"}))(null==me?void 0:me.items)})}),Z&&(0,l.jsx)(c.A,{item:!0,children:(0,l.jsx)($.d,{})})]}),(0,l.jsx)(V,{open:n,onClose:()=>N(!1),onSuccess:()=>{z(e=>e+1)}}),(0,l.jsx)(J,{open:W,onClose:()=>D(!1),onSuccess:()=>{z(e=>e+1)},namespace:(null==B?void 0:B.namespace)||"",name:(null==B?void 0:B.name)||""}),(0,l.jsxs)(m.A,{open:q,onClose:ge,children:[(0,l.jsx)(p.A,{children:"Delete API Product"}),(0,l.jsx)(h.A,{children:(0,l.jsxs)(x.A,{children:["Are you sure you want to delete ",null==K?void 0:K.name," from namespace ",null==K?void 0:K.namespace,"? This will permanently remove the API Product from Kubernetes."]})}),(0,l.jsxs)(A.A,{children:[(0,l.jsx)(u.A,{onClick:ge,color:"primary",children:"Cancel"}),(0,l.jsx)(u.A,{onClick:async()=>{if(K){Y(!0);try{if(!(await a.fetch(`${t}/api/kuadrant/apiproducts/${K.namespace}/${K.name}`,{method:"DELETE"})).ok)throw new Error("failed to delete apiproduct");z(e=>e+1)}catch(e){console.error("error deleting apiproduct:",e)}finally{Y(!1),H(!1),U(null)}}},color:"secondary",disabled:_,children:_?"Deleting...":"Delete"})]})]})]})]});var ye},G=()=>(0,l.jsx)(q,{permission:O.vs,errorMessage:"you don't have permission to view the Kuadrant page",children:(0,l.jsx)(X,{})})}}]);
2
+ //# sourceMappingURL=7632.26afde62.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static/7632.26afde62.chunk.js","mappings":"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","sources":["webpack://internal.plugin-kuadrant/./src/components/MyApiKeysCard/MyApiKeysCard.tsx","webpack://internal.plugin-kuadrant/./src/components/PermissionGate/PermissionGate.tsx","webpack://internal.plugin-kuadrant/./src/components/PlanPolicyDetailsCard/PlanPolicyDetails.tsx","webpack://internal.plugin-kuadrant/./src/components/CreateAPIProductDialog/CreateAPIProductDialog.tsx","webpack://internal.plugin-kuadrant/./src/components/EditAPIProductDialog/EditAPIProductDialog.tsx","webpack://internal.plugin-kuadrant/./src/components/KuadrantPage/KuadrantPage.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { InfoCard, Table, TableColumn, Link } from '@backstage/core-components';\nimport { useApi, configApiRef, fetchApiRef, identityApiRef } from '@backstage/core-plugin-api';\nimport useAsync from 'react-use/lib/useAsync';\nimport { Box, Chip, Typography, Tabs, Tab, IconButton, Tooltip } from '@material-ui/core';\nimport VisibilityIcon from '@material-ui/icons/Visibility';\nimport VisibilityOffIcon from '@material-ui/icons/VisibilityOff';\n\ninterface APIKeyRequest {\n metadata: {\n name: string;\n namespace: string;\n creationTimestamp: string;\n };\n spec: {\n apiName: string;\n apiNamespace: string;\n planTier: string;\n useCase?: string;\n requestedBy: {\n userId: string;\n email?: string;\n };\n };\n status?: {\n phase: 'Pending' | 'Approved' | 'Rejected';\n apiKey?: string;\n apiHostname?: string;\n reason?: string;\n reviewedBy?: string;\n reviewedAt?: string;\n };\n}\n\nexport const MyApiKeysCard = () => {\n const config = useApi(configApiRef);\n const fetchApi = useApi(fetchApiRef);\n const identityApi = useApi(identityApiRef);\n const backendUrl = config.getString('backend.baseUrl');\n const [selectedTab, setSelectedTab] = useState(0);\n const [, setUserId] = useState<string>('');\n const [visibleKeys, setVisibleKeys] = useState<Set<string>>(new Set());\n\n useAsync(async () => {\n const identity = await identityApi.getBackstageIdentity();\n setUserId(identity.userEntityRef.split('/')[1] || 'guest');\n }, [identityApi]);\n\n const { value: requests, loading, error } = useAsync(async () => {\n const response = await fetchApi.fetch(\n `${backendUrl}/api/kuadrant/requests/my`\n );\n if (!response.ok) {\n throw new Error('failed to fetch requests');\n }\n const data = await response.json();\n return data.items || [];\n }, [backendUrl, fetchApi]);\n\n if (loading) {\n return (\n <InfoCard title=\"My API Keys\">\n <Typography>Loading...</Typography>\n </InfoCard>\n );\n }\n\n if (error) {\n return (\n <InfoCard title=\"My API Keys\">\n <Typography color=\"error\">Error loading API keys: {error.message}</Typography>\n </InfoCard>\n );\n }\n\n const allRequests = requests || [];\n const approvedRequests = allRequests.filter((r: APIKeyRequest) => r.status?.phase === 'Approved');\n const pendingRequests = allRequests.filter((r: APIKeyRequest) => !r.status?.phase || r.status.phase === 'Pending');\n const rejectedRequests = allRequests.filter((r: APIKeyRequest) => r.status?.phase === 'Rejected');\n\n const toggleKeyVisibility = (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 columns: TableColumn<APIKeyRequest>[] = [\n {\n title: 'API Product',\n field: 'spec.apiName',\n render: (row: APIKeyRequest) => (\n <Link to={`/catalog/default/api/${row.spec.apiName}/api-keys`}>\n <strong>{row.spec.apiName}</strong>\n </Link>\n ),\n },\n {\n title: 'Plan',\n field: 'spec.planTier',\n render: (row: APIKeyRequest) => {\n const color = row.spec.planTier === 'gold' ? 'primary' :\n row.spec.planTier === 'silver' ? 'default' : 'secondary';\n return <Chip label={row.spec.planTier} color={color} size=\"small\" />;\n },\n },\n {\n title: 'Use Case',\n field: 'spec.useCase',\n render: (row: APIKeyRequest) => {\n return (\n <Typography variant=\"body2\">\n {row.spec.useCase || '-'}\n </Typography>\n );\n },\n },\n {\n title: 'Status',\n field: 'status.phase',\n render: (row: APIKeyRequest) => {\n const phase = row.status?.phase || 'Pending';\n const color = phase === 'Approved' ? 'primary' :\n phase === 'Rejected' ? 'secondary' : 'default';\n return <Chip label={phase} color={color} size=\"small\" />;\n },\n },\n {\n title: 'Reason',\n render: (row: APIKeyRequest) => {\n if (row.status?.phase === 'Rejected' && row.status.reason) {\n return (\n <Typography variant=\"body2\" color=\"error\">\n {row.status.reason}\n </Typography>\n );\n }\n return <Typography variant=\"body2\" color=\"textSecondary\">-</Typography>;\n },\n },\n {\n title: 'Reviewed By',\n render: (row: APIKeyRequest) => {\n if ((row.status?.phase === 'Approved' || row.status?.phase === 'Rejected') && row.status.reviewedBy) {\n const reviewedDate = row.status.reviewedAt ? new Date(row.status.reviewedAt).toLocaleDateString() : '';\n return (\n <Box>\n <Typography variant=\"body2\">{row.status.reviewedBy}</Typography>\n {reviewedDate && (\n <Typography variant=\"caption\" color=\"textSecondary\">\n {reviewedDate}\n </Typography>\n )}\n </Box>\n );\n }\n return <Typography variant=\"body2\" color=\"textSecondary\">-</Typography>;\n },\n },\n {\n title: 'API Key',\n render: (row: APIKeyRequest) => {\n if (row.status?.phase === 'Approved' && row.status.apiKey) {\n const isVisible = visibleKeys.has(row.metadata.name);\n return (\n <Box display=\"flex\" alignItems=\"center\" style={{ gap: 8 }}>\n <Box fontFamily=\"monospace\" fontSize=\"0.875rem\">\n {isVisible ? row.status.apiKey : '•'.repeat(20) + '...'}\n </Box>\n <Tooltip title={isVisible ? 'hide key' : 'show key'}>\n <IconButton\n size=\"small\"\n onClick={() => toggleKeyVisibility(row.metadata.name)}\n >\n {isVisible ? <VisibilityOffIcon fontSize=\"small\" /> : <VisibilityIcon fontSize=\"small\" />}\n </IconButton>\n </Tooltip>\n </Box>\n );\n }\n return <Typography variant=\"body2\" color=\"textSecondary\">-</Typography>;\n },\n },\n {\n title: 'Requested',\n field: 'metadata.creationTimestamp',\n render: (row: APIKeyRequest) => {\n const date = new Date(row.metadata.creationTimestamp);\n return date.toLocaleDateString();\n },\n },\n ];\n\n const getTabData = () => {\n switch (selectedTab) {\n case 0:\n return approvedRequests;\n case 1:\n return pendingRequests;\n case 2:\n return rejectedRequests;\n default:\n return allRequests;\n }\n };\n\n const tabData = getTabData();\n\n return (\n <InfoCard\n title=\"My API Keys\"\n subheader={`${approvedRequests.length} active, ${pendingRequests.length} pending`}\n >\n <Box mb={2}>\n <Tabs\n value={selectedTab}\n onChange={(_, newValue) => setSelectedTab(newValue)}\n indicatorColor=\"primary\"\n textColor=\"primary\"\n >\n <Tab label={`Active (${approvedRequests.length})`} />\n <Tab label={`Pending (${pendingRequests.length})`} />\n <Tab label={`Rejected (${rejectedRequests.length})`} />\n </Tabs>\n </Box>\n {tabData.length === 0 ? (\n <Box p={3} textAlign=\"center\">\n <Typography variant=\"body1\" color=\"textSecondary\">\n {selectedTab === 0 && 'No active API keys. Request access to an API to get started.'}\n {selectedTab === 1 && 'No pending requests.'}\n {selectedTab === 2 && 'No rejected requests.'}\n </Typography>\n </Box>\n ) : (\n <Table\n options={{\n paging: tabData.length > 10,\n pageSize: 10,\n search: false,\n toolbar: false,\n }}\n columns={columns}\n data={tabData}\n />\n )}\n </InfoCard>\n );\n};\n","import React from 'react';\nimport { Typography, Box } from '@material-ui/core';\nimport { Progress } from '@backstage/core-components';\nimport { Permission } from '@backstage/plugin-permission-common';\nimport { useKuadrantPermission } from '../../utils/permissions';\n\ninterface PermissionGateProps {\n children: React.ReactNode;\n permission: Permission;\n fallback?: React.ReactNode;\n errorMessage?: string;\n}\n\nexport const PermissionGate = ({ children, permission, fallback, errorMessage }: PermissionGateProps) => {\n const { allowed, loading, error } = useKuadrantPermission(permission);\n\n if (loading) {\n return <Progress />;\n }\n\n if (error) {\n return (\n <Box p={4}>\n <Typography color=\"error\">\n Unable to check permissions: {error.message}\n </Typography>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Please try again or contact your administrator\n </Typography>\n </Box>\n );\n }\n\n if (!allowed) {\n if (fallback) {\n return <>{fallback}</>;\n }\n return (\n <Box p={4}>\n <Typography color=\"textSecondary\">\n {errorMessage || 'You don\\'t have permission to view this page'}\n </Typography>\n <Box mt={1}>\n <Typography variant=\"caption\" color=\"textSecondary\">\n Required permission: {permission.name}\n </Typography>\n </Box>\n </Box>\n );\n }\n\n return <>{children}</>;\n};\n","import React from 'react';\nimport { Box, Typography, Chip } from '@material-ui/core';\nimport { Alert } from '@material-ui/lab';\n\ninterface PlanPolicyDetailsProps {\n selectedPolicy: {\n metadata: {\n name: string;\n };\n plans?: Array<{\n tier: string;\n description?: string;\n limits?: {\n daily?: number;\n monthly?: number;\n yearly?: number;\n };\n }>;\n } | null;\n alertSeverity?: 'warning' | 'info';\n alertMessage?: string;\n includeTopMargin?: boolean;\n}\n\nexport const PlanPolicyDetails: React.FC<PlanPolicyDetailsProps> = ({\n selectedPolicy,\n alertSeverity = 'warning',\n alertMessage = 'No PlanPolicy found for this HTTPRoute. API keys and rate limiting may not be available.',\n includeTopMargin = true,\n}) => {\n return (\n <Box\n mt={includeTopMargin ? 1 : 0}\n p={2}\n bgcolor=\"#f5f5f5\"\n borderRadius={1}\n border=\"1px solid #e0e0e0\"\n >\n {selectedPolicy ? (\n <>\n <Typography variant=\"subtitle2\" gutterBottom style={{ fontWeight: 600 }}>\n Associated PlanPolicy: <strong>{selectedPolicy.metadata.name}</strong>\n </Typography>\n\n {selectedPolicy.plans && selectedPolicy.plans.length > 0 ? (\n <>\n <Typography\n variant=\"caption\"\n display=\"block\"\n gutterBottom\n color=\"textSecondary\"\n style={{ marginTop: 8 }}\n >\n Available Plans:\n </Typography>\n <Box display=\"flex\" flexWrap=\"wrap\" mt={1} style={{ gap: 8 }}>\n {selectedPolicy.plans.map((plan: any, idx: number) => {\n const limitText = plan.limits?.daily\n ? `${plan.limits.daily}/day`\n : plan.limits?.monthly\n ? `${plan.limits.monthly}/month`\n : plan.limits?.yearly\n ? `${plan.limits.yearly}/year`\n : 'No limit';\n\n return (\n <Chip\n key={idx}\n label={`${plan.tier}: ${limitText}`}\n size=\"small\"\n variant=\"outlined\"\n color=\"primary\"\n />\n );\n })}\n </Box>\n {selectedPolicy.plans.some((p: any) => p.description) && (\n <Box mt={1}>\n {selectedPolicy.plans.filter((p: any) => p.description).map((plan: any, idx: number) => (\n <Typography key={idx} variant=\"caption\" display=\"block\" color=\"textSecondary\">\n • <strong>{plan.tier}:</strong> {plan.description}\n </Typography>\n ))}\n </Box>\n )}\n </>\n ) : (\n <Typography variant=\"caption\" color=\"textSecondary\">\n No plans defined in this PlanPolicy\n </Typography>\n )}\n </>\n ) : (\n <Alert severity={alertSeverity}>{alertMessage}</Alert>\n )}\n </Box>\n );\n};\n\n","import React, { useState } from 'react';\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Button,\n TextField,\n Box,\n Typography,\n Chip,\n Grid,\n MenuItem,\n makeStyles,\n} from '@material-ui/core';\nimport { useApi, configApiRef, fetchApiRef } from '@backstage/core-plugin-api';\nimport { Alert } from '@material-ui/lab';\nimport useAsync from 'react-use/lib/useAsync';\nimport { PlanPolicyDetails } from '../PlanPolicyDetailsCard';\n\nconst useStyles = makeStyles({\n asterisk: {\n color: '#f44336',\n },\n});\n\ninterface CreateAPIProductDialogProps {\n open: boolean;\n onClose: () => void;\n onSuccess: () => void;\n}\n\nexport const CreateAPIProductDialog = ({ open, onClose, onSuccess }: CreateAPIProductDialogProps) => {\n const classes = useStyles();\n const config = useApi(configApiRef);\n const fetchApi = useApi(fetchApiRef);\n const backendUrl = config.getString('backend.baseUrl');\n\n const [name, setName] = useState('');\n const [displayName, setDisplayName] = useState('');\n const [description, setDescription] = useState('');\n const [version, setVersion] = useState('v1');\n const [approvalMode, setApprovalMode] = useState<'automatic' | 'manual'>('manual');\n const [publishStatus, setPublishStatus] = useState<'Draft' | 'Published'>('Published');\n const [tags, setTags] = useState<string[]>([]);\n const [tagInput, setTagInput] = useState('');\n const [selectedHTTPRoute, setSelectedHTTPRoute] = useState('');\n const [contactEmail, setContactEmail] = useState('');\n const [contactTeam, setContactTeam] = useState('');\n const [docsURL, setDocsURL] = useState('');\n const [openAPISpec, setOpenAPISpec] = useState('');\n const [error, setError] = useState('');\n const [creating, setCreating] = useState(false);\n\n const { value: httpRoutes, loading: httpRoutesLoading } = useAsync(async () => {\n const response = await fetchApi.fetch(`${backendUrl}/api/kuadrant/httproutes`);\n const data = await response.json();\n // filter to only show httproutes annotated for backstage exposure\n return (data.items || []).filter((route: any) =>\n route.metadata.annotations?.['backstage.io/expose'] === 'true'\n );\n }, [backendUrl, fetchApi, open]);\n\n // load planpolicies with full details to show associated plans\n const { value: planPolicies } = useAsync(async () => {\n const response = await fetchApi.fetch(`${backendUrl}/api/kuadrant/planpolicies`);\n return await response.json();\n }, [backendUrl, fetchApi, open]);\n\n // find planpolicy associated with selected httproute\n const getPlanPolicyForRoute = (routeNamespace: string, routeName: string) => {\n if (!planPolicies?.items) return null;\n\n return planPolicies.items.find((pp: any) => {\n const ref = pp.targetRef;\n return (\n ref?.kind === 'HTTPRoute' &&\n ref?.name === routeName &&\n (!ref?.namespace || ref?.namespace === routeNamespace)\n );\n });\n };\n\n const selectedRouteInfo = selectedHTTPRoute ? selectedHTTPRoute.split('/') : null;\n const selectedPolicy = selectedRouteInfo\n ? getPlanPolicyForRoute(selectedRouteInfo[0], selectedRouteInfo[1])\n : null;\n\n const handleAddTag = () => {\n if (tagInput.trim() && !tags.includes(tagInput.trim())) {\n setTags([...tags, tagInput.trim()]);\n setTagInput('');\n }\n };\n\n const handleDeleteTag = (tagToDelete: string) => {\n setTags(tags.filter(tag => tag !== tagToDelete));\n };\n\n const handleCreate = async () => {\n setError('');\n setCreating(true);\n\n try {\n if (!selectedHTTPRoute) {\n throw new Error('Please select an HTTPRoute');\n }\n\n const [selectedRouteNamespace, selectedRouteName] = selectedHTTPRoute.split('/');\n\n // derive namespace from selected httproute\n const namespace = selectedRouteNamespace;\n\n const apiProduct = {\n apiVersion: 'extensions.kuadrant.io/v1alpha1',\n kind: 'APIProduct',\n metadata: {\n name,\n namespace,\n },\n spec: {\n displayName,\n description,\n version,\n approvalMode,\n publishStatus,\n tags,\n targetRef: {\n group: 'gateway.networking.k8s.io',\n kind: 'HTTPRoute',\n name: selectedRouteName,\n namespace: selectedRouteNamespace,\n },\n ...(contactEmail || contactTeam ? {\n contact: {\n ...(contactEmail && { email: contactEmail }),\n ...(contactTeam && { team: contactTeam }),\n },\n } : {}),\n ...(docsURL || openAPISpec ? {\n documentation: {\n ...(docsURL && { docsURL }),\n ...(openAPISpec && { openAPISpec }),\n },\n } : {}),\n },\n };\n\n const response = await fetchApi.fetch(`${backendUrl}/api/kuadrant/apiproducts`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(apiProduct),\n });\n\n if (!response.ok) {\n const errorData = await response.json();\n throw new Error(errorData.error || 'failed to create apiproduct');\n }\n\n onSuccess();\n handleClose();\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err));\n } finally {\n setCreating(false);\n }\n };\n\n const handleClose = () => {\n setName('');\n setDisplayName('');\n setDescription('');\n setVersion('v1');\n setApprovalMode('manual');\n setPublishStatus('Published');\n setTags([]);\n setTagInput('');\n setSelectedHTTPRoute('');\n setContactEmail('');\n setContactTeam('');\n setDocsURL('');\n setOpenAPISpec('');\n setError('');\n onClose();\n };\n\n return (\n <Dialog open={open} onClose={handleClose} maxWidth=\"md\" fullWidth>\n <DialogTitle>Create API Product</DialogTitle>\n <DialogContent>\n {error && (\n <Alert severity=\"error\" style={{ marginBottom: 16 }}>\n {error}\n </Alert>\n )}\n\n <Grid container spacing={2}>\n <Grid item xs={6}>\n <TextField\n fullWidth\n label=\"Name\"\n value={name}\n onChange={e => setName(e.target.value)}\n placeholder=\"my-api\"\n helperText=\"Kubernetes resource name (lowercase, hyphens)\"\n margin=\"normal\"\n required\n InputLabelProps={{\n classes: {\n asterisk: classes.asterisk,\n },\n }}\n />\n </Grid>\n <Grid item xs={6}>\n <TextField\n fullWidth\n label=\"Display Name\"\n value={displayName}\n onChange={e => setDisplayName(e.target.value)}\n placeholder=\"My API\"\n margin=\"normal\"\n required\n InputLabelProps={{\n classes: {\n asterisk: classes.asterisk,\n },\n }}\n />\n </Grid>\n <Grid item xs={6}>\n <TextField\n fullWidth\n label=\"Version\"\n value={version}\n onChange={e => setVersion(e.target.value)}\n placeholder=\"v1\"\n margin=\"normal\"\n />\n </Grid>\n <Grid item xs={12}>\n <TextField\n fullWidth\n select\n label=\"Approval Mode\"\n value={approvalMode}\n onChange={e => setApprovalMode(e.target.value as 'automatic' | 'manual')}\n margin=\"normal\"\n helperText=\"Automatic: keys are created immediately. Manual: requires approval.\"\n >\n <MenuItem value=\"manual\">Manual</MenuItem>\n <MenuItem value=\"automatic\">Automatic</MenuItem>\n </TextField>\n </Grid>\n <Grid item xs={12}>\n <TextField\n fullWidth\n select\n label=\"Publish Status\"\n value={publishStatus}\n onChange={e => setPublishStatus(e.target.value as 'Draft' | 'Published')}\n margin=\"normal\"\n helperText=\"Draft: hidden from catalog. Published: visible to consumers.\"\n >\n <MenuItem value=\"Draft\">Draft</MenuItem>\n <MenuItem value=\"Published\">Published</MenuItem>\n </TextField>\n </Grid>\n <Grid item xs={12}>\n <TextField\n fullWidth\n label=\"Description\"\n value={description}\n onChange={e => setDescription(e.target.value)}\n placeholder=\"API description\"\n margin=\"normal\"\n multiline\n rows={2}\n required\n InputLabelProps={{\n classes: {\n asterisk: classes.asterisk,\n },\n }}\n />\n </Grid>\n\n <Grid item xs={12}>\n <Typography variant=\"subtitle2\" gutterBottom style={{ marginTop: 16 }}>\n Tags\n </Typography>\n <Box display=\"flex\" flexWrap=\"wrap\" marginBottom={1} style={{ gap: 8 }}>\n {tags.map(tag => (\n <Chip\n key={tag}\n label={tag}\n onDelete={() => handleDeleteTag(tag)}\n size=\"small\"\n />\n ))}\n </Box>\n <Box display=\"flex\" style={{ gap: 8 }}>\n <TextField\n fullWidth\n size=\"small\"\n value={tagInput}\n onChange={e => setTagInput(e.target.value)}\n onKeyPress={e => e.key === 'Enter' && handleAddTag()}\n placeholder=\"Add tag\"\n />\n <Button onClick={handleAddTag} variant=\"outlined\" size=\"small\">\n Add\n </Button>\n </Box>\n </Grid>\n\n <Grid item xs={12}>\n <TextField\n fullWidth\n select\n label=\"HTTPRoute\"\n value={selectedHTTPRoute}\n onChange={e => setSelectedHTTPRoute(e.target.value)}\n margin=\"normal\"\n required\n helperText=\"Select an HTTPRoute (backstage.io/expose: true). APIProduct will be created in the same namespace.\"\n disabled={httpRoutesLoading}\n InputLabelProps={{\n classes: {\n asterisk: classes.asterisk,\n },\n }}\n >\n {httpRoutesLoading && (\n <MenuItem value=\"\">Loading...</MenuItem>\n )}\n {!httpRoutesLoading && httpRoutes && httpRoutes.length === 0 && (\n <MenuItem value=\"\">No HTTPRoutes available</MenuItem>\n )}\n {!httpRoutesLoading && httpRoutes && httpRoutes.map((route: any) => (\n <MenuItem\n key={`${route.metadata.namespace}/${route.metadata.name}`}\n value={`${route.metadata.namespace}/${route.metadata.name}`}\n >\n {route.metadata.name} ({route.metadata.namespace})\n </MenuItem>\n ))}\n </TextField>\n </Grid>\n {selectedHTTPRoute && (\n <Grid item xs={12}>\n <PlanPolicyDetails\n selectedPolicy={selectedPolicy}\n alertSeverity=\"warning\"\n alertMessage=\"No PlanPolicy found for this HTTPRoute. API keys and rate limiting may not be available.\"\n includeTopMargin={true}\n />\n </Grid>\n )}\n\n <Grid item xs={6}>\n <TextField\n fullWidth\n label=\"Contact Email\"\n value={contactEmail}\n onChange={e => setContactEmail(e.target.value)}\n placeholder=\"api-team@example.com\"\n margin=\"normal\"\n />\n </Grid>\n <Grid item xs={6}>\n <TextField\n fullWidth\n label=\"Contact Team\"\n value={contactTeam}\n onChange={e => setContactTeam(e.target.value)}\n placeholder=\"platform-team\"\n margin=\"normal\"\n />\n </Grid>\n <Grid item xs={6}>\n <TextField\n fullWidth\n label=\"Docs URL\"\n value={docsURL}\n onChange={e => setDocsURL(e.target.value)}\n placeholder=\"https://api.example.com/docs\"\n margin=\"normal\"\n />\n </Grid>\n <Grid item xs={6}>\n <TextField\n fullWidth\n label=\"OpenAPI Spec URL\"\n value={openAPISpec}\n onChange={e => setOpenAPISpec(e.target.value)}\n placeholder=\"https://api.example.com/openapi.json\"\n margin=\"normal\"\n />\n </Grid>\n </Grid>\n </DialogContent>\n <DialogActions>\n <Button onClick={handleClose}>Cancel</Button>\n <Button\n onClick={handleCreate}\n color=\"primary\"\n variant=\"contained\"\n disabled={creating || !name || !displayName || !description || !selectedHTTPRoute}\n >\n {creating ? 'Creating...' : 'Create'}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Button,\n TextField,\n Box,\n Typography,\n Chip,\n Grid,\n MenuItem,\n makeStyles,\n} from '@material-ui/core';\nimport { useApi, configApiRef, fetchApiRef } from '@backstage/core-plugin-api';\nimport { Alert } from '@material-ui/lab';\nimport { Progress } from '@backstage/core-components';\nimport useAsync from 'react-use/lib/useAsync';\nimport { PlanPolicyDetails } from '../PlanPolicyDetailsCard';\n\nconst useStyles = makeStyles({\n asterisk: {\n color: '#f44336',\n },\n});\n\ninterface EditAPIProductDialogProps {\n open: boolean;\n onClose: () => void;\n onSuccess: () => void;\n namespace: string;\n name: string;\n}\n\nexport const EditAPIProductDialog = ({open, onClose, onSuccess, namespace, name}: EditAPIProductDialogProps) => {\n const classes = useStyles();\n const config = useApi(configApiRef);\n const fetchApi = useApi(fetchApiRef);\n const backendUrl = config.getString('backend.baseUrl');\n const [loading, setLoading] = useState(false);\n const [displayName, setDisplayName] = useState('');\n const [description, setDescription] = useState('');\n const [version, setVersion] = useState('v1');\n const [publishStatus, setPublishStatus] = useState<'Draft' | 'Published'>('Draft');\n const [approvalMode, setApprovalMode] = useState<'automatic' | 'manual'>('manual');\n const [tags, setTags] = useState<string[]>([]);\n const [targetRef, setTargetRef] = useState<any>(null);\n const [tagInput, setTagInput] = useState('');\n const [contactEmail, setContactEmail] = useState('');\n const [contactTeam, setContactTeam] = useState('');\n const [docsURL, setDocsURL] = useState('');\n const [openAPISpec, setOpenAPISpec] = useState('');\n const [error, setError] = useState('');\n const [saving, setSaving] = useState(false);\n\n // Load APIProduct data when dialog opens\n useEffect(() => {\n if (open && namespace && name) {\n setLoading(true);\n setError('');\n\n fetchApi.fetch(`${backendUrl}/api/kuadrant/apiproducts/${namespace}/${name}`)\n .then(res => res.json())\n .then(data => {\n setDisplayName(data.spec.displayName || '');\n setDescription(data.spec.description || '');\n setVersion(data.spec.version || 'v1');\n setPublishStatus(data.spec.publishStatus || 'Draft');\n setApprovalMode(data.spec.approvalMode || 'manual');\n setTags(data.spec.tags || []);\n setTargetRef(data.spec.targetRef || null);\n setContactEmail(data.spec.contact?.email || '');\n setContactTeam(data.spec.contact?.team || '');\n setDocsURL(data.spec.documentation?.docsURL || '');\n setOpenAPISpec(data.spec.documentation?.openAPISpec || '');\n setLoading(false);\n })\n .catch(err => {\n setError(err.message || 'Failed to load API Product');\n setLoading(false);\n });\n }\n }, [open, namespace, name, backendUrl, fetchApi]);\n\n // load planpolicies with full details to show associated plans\n const { value: planPolicies } = useAsync(async () => {\n if (!open) return null;\n const response = await fetchApi.fetch(`${backendUrl}/api/kuadrant/planpolicies`);\n return await response.json();\n }, [backendUrl, fetchApi, open]);\n\n // find planpolicy associated with targetRef\n const selectedPolicy = React.useMemo(() => {\n if (!planPolicies?.items || !targetRef) return null;\n\n return planPolicies.items.find((pp: any) => {\n const ref = pp.targetRef;\n return (\n ref?.kind === 'HTTPRoute' &&\n ref?.name === targetRef.name &&\n (!ref?.namespace || ref?.namespace === (targetRef.namespace || namespace))\n );\n });\n }, [planPolicies, targetRef, namespace]);\n\n const handleAddTag = () => {\n if (tagInput.trim() && !tags.includes(tagInput.trim())) {\n setTags([...tags, tagInput.trim()]);\n setTagInput('');\n }\n };\n\n const handleDeleteTag = (tagToDelete: string) => {\n setTags(tags.filter(tag => tag !== tagToDelete));\n };\n\n const handleSave = async () => {\n setError('');\n setSaving(true);\n\n try {\n const patch = {\n spec: {\n displayName,\n description,\n version,\n publishStatus,\n approvalMode,\n tags,\n targetRef,\n ...(contactEmail || contactTeam ? {\n contact: {\n ...(contactEmail && { email: contactEmail }),\n ...(contactTeam && { team: contactTeam }),\n },\n } : {}),\n ...(docsURL || openAPISpec ? {\n documentation: {\n ...(docsURL && { docsURL }),\n ...(openAPISpec && { openAPISpec }),\n },\n } : {}),\n },\n };\n\n const response = await fetchApi.fetch(\n `${backendUrl}/api/kuadrant/apiproducts/${namespace}/${name}`,\n {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(patch),\n }\n );\n\n if (!response.ok) {\n const errorData = await response.json();\n throw new Error(errorData.error || 'failed to update apiproduct');\n }\n\n onSuccess();\n onClose();\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err));\n } finally {\n setSaving(false);\n }\n };\n\n return (\n <Dialog open={open} onClose={onClose} maxWidth=\"md\" fullWidth>\n <DialogTitle>Edit API Product</DialogTitle>\n <DialogContent>\n {error && (\n <Alert severity=\"error\" style={{ marginBottom: 16 }}>\n {error}\n </Alert>\n )}\n\n {loading ? (\n <Progress />\n ) : (\n <Grid container spacing={2}>\n <Grid item xs={6}>\n <TextField\n fullWidth\n label=\"Name\"\n value={name}\n disabled\n helperText=\"Kubernetes resource name (immutable)\"\n margin=\"normal\"\n />\n </Grid>\n <Grid item xs={6}>\n <TextField\n fullWidth\n label=\"Namespace\"\n value={namespace}\n disabled\n helperText=\"Derived from HTTPRoute (immutable)\"\n margin=\"normal\"\n />\n </Grid>\n <Grid item xs={6}>\n <TextField\n fullWidth\n label=\"Display Name\"\n value={displayName}\n onChange={e => setDisplayName(e.target.value)}\n placeholder=\"My API\"\n margin=\"normal\"\n required\n InputLabelProps={{\n classes: {\n asterisk: classes.asterisk,\n },\n }}\n />\n </Grid>\n <Grid item xs={6}>\n <TextField\n fullWidth\n label=\"Version\"\n value={version}\n onChange={e => setVersion(e.target.value)}\n placeholder=\"v1\"\n margin=\"normal\"\n />\n </Grid>\n <Grid item xs={6}>\n <TextField\n fullWidth\n select\n label=\"Publish Status\"\n value={publishStatus}\n onChange={e => setPublishStatus(e.target.value as 'Draft' | 'Published')}\n margin=\"normal\"\n helperText=\"Draft: Hidden from catalog. Published: Visible in catalog.\"\n >\n <MenuItem value=\"Draft\">Draft (Hidden)</MenuItem>\n <MenuItem value=\"Published\">Published (Visible)</MenuItem>\n </TextField>\n </Grid>\n <Grid item xs={6}>\n <TextField\n fullWidth\n select\n label=\"Approval Mode\"\n value={approvalMode}\n onChange={e => setApprovalMode(e.target.value as 'automatic' | 'manual')}\n margin=\"normal\"\n helperText=\"Automatic: keys created immediately. Manual: requires approval.\"\n >\n <MenuItem value=\"manual\">Manual</MenuItem>\n <MenuItem value=\"automatic\">Automatic</MenuItem>\n </TextField>\n </Grid>\n <Grid item xs={12}>\n <TextField\n fullWidth\n label=\"Description\"\n value={description}\n onChange={e => setDescription(e.target.value)}\n placeholder=\"API description\"\n margin=\"normal\"\n multiline\n rows={2}\n required\n InputLabelProps={{\n classes: {\n asterisk: classes.asterisk,\n },\n }}\n />\n </Grid>\n\n <Grid item xs={12}>\n <Typography variant=\"subtitle2\" gutterBottom style={{ marginTop: 16 }}>\n Tags\n </Typography>\n <Box display=\"flex\" flexWrap=\"wrap\" marginBottom={1} style={{ gap: 8 }}>\n {tags.map(tag => (\n <Chip\n key={tag}\n label={tag}\n onDelete={() => handleDeleteTag(tag)}\n size=\"small\"\n />\n ))}\n </Box>\n <Box display=\"flex\" style={{ gap: 8 }}>\n <TextField\n fullWidth\n size=\"small\"\n value={tagInput}\n onChange={e => setTagInput(e.target.value)}\n onKeyPress={e => e.key === 'Enter' && handleAddTag()}\n placeholder=\"Add tag\"\n />\n <Button onClick={handleAddTag} variant=\"outlined\" size=\"small\">\n Add\n </Button>\n </Box>\n </Grid>\n {targetRef && (\n <>\n <Grid item xs={12}>\n <TextField\n fullWidth\n label=\"HTTPRoute\"\n value={`${targetRef.namespace || namespace}/${targetRef.name}`}\n disabled\n helperText=\"Target HTTPRoute (immutable)\"\n margin=\"normal\"\n />\n </Grid>\n\n <Grid item xs={12}>\n <PlanPolicyDetails\n selectedPolicy={selectedPolicy}\n alertSeverity=\"info\"\n alertMessage=\"No PlanPolicy found for this HTTPRoute.\"\n includeTopMargin={false}\n />\n </Grid>\n </>\n )}\n\n <Grid item xs={6}>\n <TextField\n fullWidth\n label=\"Contact Email\"\n value={contactEmail}\n onChange={e => setContactEmail(e.target.value)}\n placeholder=\"api-team@example.com\"\n margin=\"normal\"\n />\n </Grid>\n <Grid item xs={6}>\n <TextField\n fullWidth\n label=\"Contact Team\"\n value={contactTeam}\n onChange={e => setContactTeam(e.target.value)}\n placeholder=\"platform-team\"\n margin=\"normal\"\n />\n </Grid>\n <Grid item xs={6}>\n <TextField\n fullWidth\n label=\"Docs URL\"\n value={docsURL}\n onChange={e => setDocsURL(e.target.value)}\n placeholder=\"https://api.example.com/docs\"\n margin=\"normal\"\n />\n </Grid>\n <Grid item xs={6}>\n <TextField\n fullWidth\n label=\"OpenAPI Spec URL\"\n value={openAPISpec}\n onChange={e => setOpenAPISpec(e.target.value)}\n placeholder=\"https://api.example.com/openapi.json\"\n margin=\"normal\"\n />\n </Grid>\n </Grid>\n )}\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose}>Cancel</Button>\n <Button\n onClick={handleSave}\n color=\"primary\"\n variant=\"contained\"\n disabled={saving || loading || !displayName || !description}\n >\n {saving ? 'Saving...' : 'Save'}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n","import React, { useState } from 'react';\nimport { Typography, Grid, Box, Chip, Button, IconButton, Dialog, DialogTitle, DialogContent, DialogContentText, DialogActions } from '@material-ui/core';\nimport AddIcon from '@material-ui/icons/Add';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport EditIcon from '@material-ui/icons/Edit';\nimport {\n InfoCard,\n Header,\n Page,\n Content,\n SupportButton,\n Progress,\n ResponseErrorPanel,\n Link,\n Table,\n TableColumn,\n} from '@backstage/core-components';\nimport useAsync from 'react-use/lib/useAsync';\nimport { useApi, configApiRef, fetchApiRef } from '@backstage/core-plugin-api';\nimport { ApprovalQueueCard } from '../ApprovalQueueCard';\nimport { MyApiKeysCard } from '../MyApiKeysCard';\nimport { PermissionGate } from '../PermissionGate';\nimport { CreateAPIProductDialog } from '../CreateAPIProductDialog';\nimport {\n kuadrantApiProductCreatePermission,\n kuadrantApiProductDeletePermission,\n kuadrantApiProductUpdatePermission,\n kuadrantApiProductListPermission,\n kuadrantApiKeyRequestReadAllPermission,\n kuadrantPlanPolicyListPermission,\n} from '../../permissions';\nimport { useKuadrantPermission } from '../../utils/permissions';\nimport { EditAPIProductDialog } from '../EditAPIProductDialog';\n\ntype KuadrantResource = {\n metadata: {\n name: string;\n namespace: string;\n creationTimestamp: string;\n };\n spec?: any;\n};\n\ntype KuadrantList = {\n items: KuadrantResource[];\n};\n\nexport const ResourceList = () => {\n const config = useApi(configApiRef);\n const fetchApi = useApi(fetchApiRef);\n const backendUrl = config.getString('backend.baseUrl');\n const [createDialogOpen, setCreateDialogOpen] = useState(false);\n const [editDialogOpen, setEditDialogOpen] = useState(false);\n const [refreshTrigger, setRefreshTrigger] = useState(0);\n const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);\n const [apiProductToDelete, setApiProductToDelete] = useState<{ namespace: string; name: string } | null>(null);\n const [apiProductToEdit, setApiProductToEdit] = useState<{ namespace: string; name: string } | null>(null);\n const [deleting, setDeleting] = useState(false);\n\n const {\n allowed: canCreateApiProduct,\n loading: createPermissionLoading,\n error: createPermissionError,\n } = useKuadrantPermission(kuadrantApiProductCreatePermission);\n\n const {\n allowed: canViewApprovalQueue,\n loading: approvalQueuePermissionLoading,\n error: approvalQueuePermissionError,\n } = useKuadrantPermission(kuadrantApiKeyRequestReadAllPermission);\n\n const {\n allowed: canDeleteApiProduct,\n loading: deletePermissionLoading,\n error: deletePermissionError,\n } = useKuadrantPermission(kuadrantApiProductDeletePermission);\n\n const {\n allowed: canUpdateApiProduct,\n } = useKuadrantPermission(kuadrantApiProductUpdatePermission);\n\n const {\n allowed: canListPlanPolicies,\n loading: planPolicyPermissionLoading,\n error: planPolicyPermissionError,\n } = useKuadrantPermission(kuadrantPlanPolicyListPermission);\n\n const { value: apiProducts, loading: apiProductsLoading, error: apiProductsError } = useAsync(async (): Promise<KuadrantList> => {\n const response = await fetchApi.fetch(`${backendUrl}/api/kuadrant/apiproducts`);\n return await response.json();\n }, [backendUrl, fetchApi, refreshTrigger]);\n\n const { value: planPolicies, loading: planPoliciesLoading, error: planPoliciesError } = useAsync(async (): Promise<KuadrantList> => {\n const response = await fetchApi.fetch(`${backendUrl}/api/kuadrant/planpolicies`);\n return await response.json();\n }, [backendUrl, fetchApi, refreshTrigger]);\n\n const loading = apiProductsLoading || planPoliciesLoading || createPermissionLoading || approvalQueuePermissionLoading || deletePermissionLoading || planPolicyPermissionLoading;\n const error = apiProductsError || planPoliciesError;\n const permissionError = createPermissionError || approvalQueuePermissionError || deletePermissionError || planPolicyPermissionError;\n\n const handleCreateSuccess = () => {\n setRefreshTrigger(prev => prev + 1);\n };\n\n const handleEditClick = (namespace: string, name: string) => {\n setApiProductToEdit({ namespace, name });\n setEditDialogOpen(true);\n };\n\n const handleEditSuccess = () => {\n setRefreshTrigger(prev => prev + 1);\n };\n\n const handleDeleteClick = (namespace: string, name: string) => {\n setApiProductToDelete({ namespace, name });\n setDeleteDialogOpen(true);\n };\n\n const handleDeleteConfirm = async () => {\n if (!apiProductToDelete) return;\n\n setDeleting(true);\n try {\n const response = await fetchApi.fetch(\n `${backendUrl}/api/kuadrant/apiproducts/${apiProductToDelete.namespace}/${apiProductToDelete.name}`,\n { method: 'DELETE' }\n );\n\n if (!response.ok) {\n throw new Error('failed to delete apiproduct');\n }\n\n setRefreshTrigger(prev => prev + 1);\n } catch (err) {\n console.error('error deleting apiproduct:', err);\n } finally {\n setDeleting(false);\n setDeleteDialogOpen(false);\n setApiProductToDelete(null);\n }\n };\n\n const handleDeleteCancel = () => {\n setDeleteDialogOpen(false);\n setApiProductToDelete(null);\n };\n\n const formatDate = (dateString: string) => {\n const date = new Date(dateString);\n return date.toLocaleDateString('en-GB', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n });\n };\n\n const columns: TableColumn[] = [\n {\n title: 'Name',\n field: 'name',\n render: (row: any) => (\n <Link to={`/catalog/default/api/${row.metadata.name}/api-product`}>\n <strong>{row.spec?.displayName || row.metadata.name}</strong>\n </Link>\n ),\n },\n {\n title: 'Resource Name',\n field: 'metadata.name',\n },\n {\n title: 'Version',\n field: 'spec.version',\n render: (row: any) => row.spec?.version || '-',\n },\n {\n title: 'HTTPRoute',\n field: 'spec.targetRef.name',\n render: (row: any) => row.spec?.targetRef?.name || '-',\n },\n {\n title: 'Publish Status',\n field: 'spec.publishStatus',\n render: (row: any) => {\n const status = row.spec?.publishStatus || 'Draft';\n return (\n <Chip \n label={status} \n size=\"small\" \n color={status === 'Published' ? 'primary' : 'default'}\n />\n );\n },\n },\n {\n title: 'Namespace',\n field: 'metadata.namespace',\n },\n {\n title: 'Created',\n field: 'metadata.creationTimestamp',\n render: (row: any) => formatDate(row.metadata.creationTimestamp),\n },\n {\n title: 'Actions',\n field: 'actions',\n render: (row: any) => (\n <Box display=\"flex\" style={{ gap: 4 }}>\n {canUpdateApiProduct && (\n <IconButton\n size=\"small\"\n onClick={() => handleEditClick(row.metadata.namespace, row.metadata.name)}\n title=\"Edit API Product\"\n >\n <EditIcon fontSize=\"small\" />\n </IconButton>\n )}\n \n {canDeleteApiProduct && (\n <IconButton\n size=\"small\"\n onClick={() => handleDeleteClick(row.metadata.namespace, row.metadata.name)}\n title=\"Delete API Product\"\n >\n <DeleteIcon fontSize=\"small\" />\n </IconButton>\n )}\n </Box>\n ),\n },\n ];\n\n const planPolicyColumns: TableColumn[] = [\n {\n title: 'Name',\n field: 'metadata.name',\n render: (row: any) => (\n <Link to={`/kuadrant/planpolicy/${row.metadata.namespace}/${row.metadata.name}`}>\n <strong>{row.metadata.name}</strong>\n </Link>\n ),\n },\n {\n title: 'Namespace',\n field: 'metadata.namespace',\n },\n ];\n\n const renderResources = (resources: KuadrantResource[] | undefined) => {\n if (!resources || resources.length === 0) {\n return <Typography variant=\"body2\" color=\"textSecondary\">No API products found</Typography>;\n }\n return (\n <Table\n options={{ paging: false, search: false, toolbar: false }}\n columns={columns}\n data={resources}\n />\n );\n };\n\n const renderPlanPolicies = (resources: KuadrantResource[] | undefined) => {\n if (!resources || resources.length === 0) {\n return <Typography variant=\"body2\" color=\"textSecondary\">No plan policies found</Typography>;\n }\n return (\n <Table\n options={{ paging: false, search: false, toolbar: false }}\n columns={planPolicyColumns}\n data={resources}\n />\n );\n };\n\n return (\n <Page themeId=\"tool\">\n <Header title=\"Kuadrant\" subtitle=\"API management for Kubernetes\">\n <SupportButton>Manage API products and access requests</SupportButton>\n </Header>\n <Content>\n {loading && <Progress />}\n {error && <ResponseErrorPanel error={error} />}\n {permissionError && (\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: {createPermissionError ? 'kuadrant.apiproduct.create' :\n deletePermissionError ? 'kuadrant.apiproduct.delete' :\n approvalQueuePermissionError ? 'kuadrant.apikeyrequest.read.all' :\n planPolicyPermissionError ? 'kuadrant.planpolicy.list' : 'unknown'}\n </Typography>\n <Typography variant=\"body2\" color=\"textSecondary\">\n please try again or contact your administrator\n </Typography>\n </Box>\n )}\n {!loading && !error && !permissionError && (\n <Grid container spacing={3} direction=\"column\">\n <Grid item>\n <MyApiKeysCard />\n </Grid>\n\n <Grid item>\n <InfoCard\n title=\"API Products\"\n action={\n canCreateApiProduct ? (\n <Box display=\"flex\" alignItems=\"center\" height=\"100%\" mt={1}>\n <Button\n variant=\"contained\"\n color=\"primary\"\n size=\"small\"\n startIcon={<AddIcon />}\n onClick={() => setCreateDialogOpen(true)}\n >\n Create API Product\n </Button>\n </Box>\n ) : undefined\n }\n >\n {renderResources(apiProducts?.items)}\n </InfoCard>\n </Grid>\n\n {canListPlanPolicies && (\n <Grid item>\n <InfoCard title=\"Plan Policies\">\n {renderPlanPolicies(planPolicies?.items)}\n </InfoCard>\n </Grid>\n )}\n\n {canViewApprovalQueue && (\n <Grid item>\n <ApprovalQueueCard />\n </Grid>\n )}\n </Grid>\n )}\n <CreateAPIProductDialog\n open={createDialogOpen}\n onClose={() => setCreateDialogOpen(false)}\n onSuccess={handleCreateSuccess}\n />\n <EditAPIProductDialog\n open={editDialogOpen}\n onClose={() => setEditDialogOpen(false)}\n onSuccess={handleEditSuccess}\n namespace={apiProductToEdit?.namespace || ''}\n name={apiProductToEdit?.name || ''}\n />\n <Dialog open={deleteDialogOpen} onClose={handleDeleteCancel}>\n <DialogTitle>Delete API Product</DialogTitle>\n <DialogContent>\n <DialogContentText>\n Are you sure you want to delete {apiProductToDelete?.name} from namespace {apiProductToDelete?.namespace}?\n This will permanently remove the API Product from Kubernetes.\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button onClick={handleDeleteCancel} color=\"primary\">\n Cancel\n </Button>\n <Button onClick={handleDeleteConfirm} color=\"secondary\" disabled={deleting}>\n {deleting ? 'Deleting...' : 'Delete'}\n </Button>\n </DialogActions>\n </Dialog>\n </Content>\n </Page>\n );\n};\n\nexport const KuadrantPage = () => {\n return (\n <PermissionGate\n permission={kuadrantApiProductListPermission}\n errorMessage=\"you don't have permission to view the Kuadrant page\"\n >\n <ResourceList />\n </PermissionGate>\n );\n};\n"],"names":["MyApiKeysCard","config","useApi","configApiRef","fetchApi","fetchApiRef","identityApi","identityApiRef","backendUrl","getString","selectedTab","setSelectedTab","useState","setUserId","visibleKeys","setVisibleKeys","Set","useAsync","async","identity","getBackstageIdentity","userEntityRef","split","value","requests","loading","error","response","fetch","ok","Error","json","items","InfoCard","title","Typography","color","message","allRequests","approvedRequests","filter","r","status","phase","pendingRequests","rejectedRequests","columns","field","render","row","Link","to","spec","apiName","strong","planTier","Chip","label","size","variant","useCase","reason","reviewedBy","reviewedDate","reviewedAt","Date","toLocaleDateString","Box","apiKey","isVisible","has","metadata","name","display","alignItems","style","gap","fontFamily","fontSize","repeat","Tooltip","IconButton","onClick","toggleKeyVisibility","keyName","prev","newSet","delete","add","VisibilityOffIcon","VisibilityIcon","creationTimestamp","tabData","getTabData","subheader","length","mb","Tabs","onChange","_","newValue","indicatorColor","textColor","Tab","p","textAlign","Table","options","paging","pageSize","search","toolbar","data","PermissionGate","children","permission","fallback","errorMessage","allowed","useKuadrantPermission","Progress","mt","PlanPolicyDetails","selectedPolicy","alertSeverity","alertMessage","includeTopMargin","bgcolor","borderRadius","border","gutterBottom","fontWeight","plans","marginTop","flexWrap","map","plan","idx","limitText","limits","daily","monthly","yearly","tier","some","description","Alert","severity","useStyles","makeStyles","asterisk","CreateAPIProductDialog","open","onClose","onSuccess","classes","setName","displayName","setDisplayName","setDescription","version","setVersion","approvalMode","setApprovalMode","publishStatus","setPublishStatus","tags","setTags","tagInput","setTagInput","selectedHTTPRoute","setSelectedHTTPRoute","contactEmail","setContactEmail","contactTeam","setContactTeam","docsURL","setDocsURL","openAPISpec","setOpenAPISpec","setError","creating","setCreating","httpRoutes","httpRoutesLoading","route","annotations","planPolicies","selectedRouteInfo","routeNamespace","routeName","find","pp","ref","targetRef","kind","namespace","handleAddTag","trim","includes","handleClose","Dialog","maxWidth","fullWidth","DialogTitle","DialogContent","marginBottom","Grid","container","spacing","item","xs","TextField","e","target","placeholder","helperText","margin","required","InputLabelProps","select","MenuItem","multiline","rows","tag","onDelete","handleDeleteTag","tagToDelete","onKeyPress","key","Button","disabled","DialogActions","selectedRouteNamespace","selectedRouteName","apiProduct","apiVersion","group","contact","email","team","documentation","method","headers","body","JSON","stringify","errorData","err","String","EditAPIProductDialog","setLoading","setTargetRef","saving","setSaving","useEffect","then","res","catch","React","patch","ResourceList","createDialogOpen","setCreateDialogOpen","editDialogOpen","setEditDialogOpen","refreshTrigger","setRefreshTrigger","deleteDialogOpen","setDeleteDialogOpen","apiProductToDelete","setApiProductToDelete","apiProductToEdit","setApiProductToEdit","deleting","setDeleting","canCreateApiProduct","createPermissionLoading","createPermissionError","kuadrantApiProductCreatePermission","canViewApprovalQueue","approvalQueuePermissionLoading","approvalQueuePermissionError","kuadrantApiKeyRequestReadAllPermission","canDeleteApiProduct","deletePermissionLoading","deletePermissionError","kuadrantApiProductDeletePermission","canUpdateApiProduct","kuadrantApiProductUpdatePermission","canListPlanPolicies","planPolicyPermissionLoading","planPolicyPermissionError","kuadrantPlanPolicyListPermission","apiProducts","apiProductsLoading","apiProductsError","planPoliciesLoading","planPoliciesError","permissionError","handleDeleteCancel","formatDate","dateString","year","month","day","handleEditClick","EditIcon","handleDeleteClick","DeleteIcon","planPolicyColumns","Page","themeId","Header","subtitle","SupportButton","Content","ResponseErrorPanel","direction","action","height","startIcon","AddIcon","undefined","resources","renderPlanPolicies","ApprovalQueueCard","DialogContentText","console","KuadrantPage","kuadrantApiProductListPermission"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunkinternal_plugin_kuadrant=self.webpackChunkinternal_plugin_kuadrant||[]).push([[5603,7984],{65603:(e,t,n)=>{n.r(t),n.d(t,{createVersionedContext:()=>u,createVersionedContextForTesting:()=>l,createVersionedValueMap:()=>s,getOrCreateGlobalSingleton:()=>o,useVersionedContext:()=>c});const r="undefined"!=typeof window&&window.Math===Math?window:"undefined"!=typeof self&&self.Math===Math?self:Function("return this")(),a=e=>`__@backstage/${e}__`;function o(e,t){const n=a(e);let o=r[n];return o||(o=t(),r[n]=o,o)}var i=n(95478);function s(e){Object.freeze(e);const t={atVersion:t=>e[t]};return Object.defineProperty(t,"$map",{configurable:!0,enumerable:!0,get:()=>e}),t}function u(e){return o(e,()=>(0,i.createContext)(void 0))}function c(e){return(0,i.useContext)(u(e))}function l(e){return{set(t){globalThis[`__@backstage/${e}__`]=(0,i.createContext)(s(t))},reset(){delete globalThis[`__@backstage/${e}__`]}}}}}]);
2
+ //# sourceMappingURL=7984.c8511b89.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static/7984.c8511b89.chunk.js","mappings":"uTASA,MAAMA,EARkB,oBAAXC,QAA0BA,OAAOC,OAASA,KAC5CD,OAEW,oBAATE,MAAwBA,KAAKD,OAASA,KACxCC,KAEFC,SAAS,cAATA,GAGHC,EAAWC,GAAO,gBAAgBA,MACxC,SAASC,EAA2BD,EAAIE,GACtC,MAAMC,EAAMJ,EAAQC,GACpB,IAAII,EAAQV,EAAaS,GACzB,OAAIC,IAGJA,EAAQF,IACRR,EAAaS,GAAOC,EACbA,EACT,C,eCpBA,SAASC,EAAwBC,GAC/BC,OAAOC,OAAOF,GACd,MAAMG,EAAiB,CACrBC,UAAUC,GACDL,EAASK,IAUpB,OAPAJ,OAAOK,eAAeH,EAAgB,OAAQ,CAC5CI,cAAc,EACdC,YAAY,EACZC,IAAG,IACMT,IAGJG,CACT,CCXA,SAASO,EAAuBb,GAC9B,OAAOF,EACLE,EACA,KAAM,IAAAc,oBAAc,GAExB,CACA,SAASC,EAAoBf,GAC3B,OAAO,IAAAgB,YAAWH,EAAuBb,GAC3C,CACA,SAASiB,EAAiCjB,GACxC,MAAO,CACL,GAAAkB,CAAIf,GACFgB,WAAW,gBAAgBnB,QAAW,IAAAc,eACpCZ,EAAwBC,GAE5B,EACA,KAAAiB,UACSD,WAAW,gBAAgBnB,MACpC,EAEJ,C","sources":["webpack://internal.plugin-kuadrant/../../node_modules/@backstage/version-bridge/dist/lib/globalObject.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@backstage/version-bridge/dist/lib/VersionedValue.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@backstage/version-bridge/dist/lib/VersionedContext.esm.js"],"sourcesContent":["function getGlobalObject() {\n if (typeof window !== \"undefined\" && window.Math === Math) {\n return window;\n }\n if (typeof self !== \"undefined\" && self.Math === Math) {\n return self;\n }\n return Function(\"return this\")();\n}\nconst globalObject = getGlobalObject();\nconst makeKey = (id) => `__@backstage/${id}__`;\nfunction getOrCreateGlobalSingleton(id, supplier) {\n const key = makeKey(id);\n let value = globalObject[key];\n if (value) {\n return value;\n }\n value = supplier();\n globalObject[key] = value;\n return value;\n}\n\nexport { getOrCreateGlobalSingleton };\n//# sourceMappingURL=globalObject.esm.js.map\n","function createVersionedValueMap(versions) {\n Object.freeze(versions);\n const versionedValue = {\n atVersion(version) {\n return versions[version];\n }\n };\n Object.defineProperty(versionedValue, \"$map\", {\n configurable: true,\n enumerable: true,\n get() {\n return versions;\n }\n });\n return versionedValue;\n}\n\nexport { createVersionedValueMap };\n//# sourceMappingURL=VersionedValue.esm.js.map\n","import { createContext, useContext } from 'react';\nimport { getOrCreateGlobalSingleton } from './globalObject.esm.js';\nimport { createVersionedValueMap } from './VersionedValue.esm.js';\n\nfunction createVersionedContext(key) {\n return getOrCreateGlobalSingleton(\n key,\n () => createContext(void 0)\n );\n}\nfunction useVersionedContext(key) {\n return useContext(createVersionedContext(key));\n}\nfunction createVersionedContextForTesting(key) {\n return {\n set(versions) {\n globalThis[`__@backstage/${key}__`] = createContext(\n createVersionedValueMap(versions)\n );\n },\n reset() {\n delete globalThis[`__@backstage/${key}__`];\n }\n };\n}\n\nexport { createVersionedContext, createVersionedContextForTesting, useVersionedContext };\n//# sourceMappingURL=VersionedContext.esm.js.map\n"],"names":["globalObject","window","Math","self","Function","makeKey","id","getOrCreateGlobalSingleton","supplier","key","value","createVersionedValueMap","versions","Object","freeze","versionedValue","atVersion","version","defineProperty","configurable","enumerable","get","createVersionedContext","createContext","useVersionedContext","useContext","createVersionedContextForTesting","set","globalThis","reset"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunkinternal_plugin_kuadrant=self.webpackChunkinternal_plugin_kuadrant||[]).push([[8365],{55735:(e,t,n)=>{var s=n(4293),r=n(78920);t.A=void 0;var i=r(n(95478)),a=(0,s(n(74044)).default)(i.createElement("path",{d:"M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z"}),"ArrowBack");t.A=a},58365:(e,t,n)=>{n.r(t),n.d(t,{PlanPolicyDetailPage:()=>T});var s=n(31085),r=(n(95478),n(42469)),i=n(72501),a=n(64947),l=n(42899),c=n(10394),o=n(40703),d=n(45685),x=n(67720),h=n(48653),j=n(8973),m=n(29655),A=n(91567),p=n(289),u=n(55639),y=n(46681),g=n(86687),f=n(42367),v=n(96040),b=n(26648),k=n(91638),w=n(22097),S=n(55735),P=n(6924);const T=()=>{var e;const{namespace:t,name:n}=(0,r.useParams)(),T=(0,r.useNavigate)(),C=(0,w.useApi)(w.configApiRef),R=(0,w.useApi)(w.fetchApiRef),Y=C.getString("backend.baseUrl"),{value:I,loading:L,error:B}=(0,k.A)(async()=>{const e=await R.fetch(`${Y}/api/kuadrant/planpolicies/${t}/${n}`);if(!e.ok)throw new Error(`Failed to fetch PlanPolicy: ${e.status}`);return await e.json()},[Y,t,n,R]);return L?(0,s.jsxs)(p.Y,{themeId:"tool",children:[(0,s.jsx)(u.Y,{title:"Loading..."}),(0,s.jsx)(y.U,{children:(0,s.jsx)(g.k,{})})]}):B?(0,s.jsxs)(p.Y,{themeId:"tool",children:[(0,s.jsx)(u.Y,{title:"Error"}),(0,s.jsx)(y.U,{children:(0,s.jsx)(f._,{error:B})})]}):I?(0,s.jsxs)(p.Y,{themeId:"tool",children:[(0,s.jsx)(u.Y,{title:I.metadata.name,subtitle:`PlanPolicy in ${I.metadata.namespace}`,children:(0,s.jsx)(a.A,{variant:"outlined",startIcon:(0,s.jsx)(S.A,{}),onClick:()=>T("/kuadrant"),children:"Back to Kuadrant"})}),(0,s.jsx)(y.U,{children:(0,s.jsxs)(l.A,{container:!0,spacing:3,children:[(0,s.jsx)(l.A,{item:!0,xs:12,children:(0,s.jsx)(v.n,{title:"Target Reference",children:(0,s.jsx)(c.A,{p:2,children:(0,s.jsxs)(l.A,{container:!0,spacing:2,children:[(0,s.jsxs)(l.A,{item:!0,xs:12,md:4,children:[(0,s.jsx)(i.A,{variant:"body2",color:"textSecondary",children:"Kind"}),(0,s.jsx)(i.A,{variant:"body1",children:(0,s.jsx)("strong",{children:I.spec.targetRef.kind})})]}),(0,s.jsxs)(l.A,{item:!0,xs:12,md:4,children:[(0,s.jsx)(i.A,{variant:"body2",color:"textSecondary",children:"Name"}),(0,s.jsx)(i.A,{variant:"body1",children:(0,s.jsx)("strong",{children:I.spec.targetRef.name})})]}),(0,s.jsxs)(l.A,{item:!0,xs:12,md:4,children:[(0,s.jsx)(i.A,{variant:"body2",color:"textSecondary",children:"Namespace"}),(0,s.jsx)(i.A,{variant:"body1",children:(0,s.jsx)("strong",{children:I.spec.targetRef.namespace||I.metadata.namespace})})]})]})})})}),(0,s.jsx)(l.A,{item:!0,xs:12,children:(0,s.jsx)(v.n,{title:"Plan Tiers",children:(0,s.jsx)(c.A,{p:2,children:(0,s.jsx)(l.A,{container:!0,spacing:2,children:I.spec.plans.map((e,t)=>{return(0,s.jsx)(l.A,{item:!0,xs:12,md:6,lg:4,children:(0,s.jsxs)(o.A,{variant:"outlined",children:[(0,s.jsx)(d.A,{title:(0,s.jsx)(c.A,{display:"flex",alignItems:"center",style:{gap:8},children:(0,s.jsx)(x.A,{label:e.tier,color:"primary"})})}),(0,s.jsxs)(h.A,{children:[(0,s.jsx)(i.A,{variant:"body2",color:"textSecondary",gutterBottom:!0,children:"Rate Limits"}),e.limits&&(n=e.limits,n?Object.entries(n).map(([e,t])=>`${t} per ${e}`):[]).map((e,t)=>(0,s.jsx)(i.A,{variant:"body1",gutterBottom:!0,children:e},t)),e.predicate&&(0,s.jsxs)(c.A,{mt:2,children:[(0,s.jsx)(i.A,{variant:"body2",color:"textSecondary",gutterBottom:!0,children:"Predicate (CEL)"}),(0,s.jsx)(c.A,{p:1,style:{backgroundColor:"#f5f5f5",borderRadius:4,fontFamily:"monospace",fontSize:"0.875rem",overflow:"auto"},children:(0,s.jsx)("pre",{style:{margin:0,whiteSpace:"pre-wrap",wordBreak:"break-word",color:"#333"},children:e.predicate})})]})]})]})},t);var n})})})})}),(null===(e=I.status)||void 0===e?void 0:e.conditions)&&I.status.conditions.length>0&&(0,s.jsx)(l.A,{item:!0,xs:12,children:(0,s.jsx)(v.n,{title:"Status Conditions",children:(0,s.jsx)(c.A,{p:2,children:(0,s.jsx)(l.A,{container:!0,spacing:2,children:I.status.conditions.map((e,t)=>(0,s.jsx)(l.A,{item:!0,xs:12,children:(0,s.jsx)(o.A,{variant:"outlined",style:{borderColor:"True"===e.status?"#4caf50":"False"===e.status?"#f44336":"#ff9800"},children:(0,s.jsxs)(h.A,{children:[(0,s.jsxs)(c.A,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[(0,s.jsx)(i.A,{variant:"h6",children:e.type}),(0,s.jsx)(x.A,{label:e.status,color:"True"===e.status?"primary":"default",size:"small"})]}),e.reason&&(0,s.jsxs)(i.A,{variant:"body2",color:"textSecondary",style:{marginTop:8},children:[(0,s.jsx)("strong",{children:"Reason:"})," ",e.reason]}),e.message&&(0,s.jsx)(i.A,{variant:"body2",style:{marginTop:4},children:e.message}),e.lastTransitionTime&&(0,s.jsxs)(i.A,{variant:"caption",color:"textSecondary",style:{marginTop:8,display:"block"},children:["Last transition: ",new Date(e.lastTransitionTime).toLocaleString()]})]})})},t))})})})}),(0,s.jsx)(l.A,{item:!0,xs:12,children:(0,s.jsxs)(j.A,{children:[(0,s.jsx)(m.A,{expandIcon:(0,s.jsx)(P.A,{}),children:(0,s.jsx)(i.A,{variant:"h6",children:"View Full YAML"})}),(0,s.jsx)(A.A,{children:(0,s.jsx)(c.A,{width:"100%",children:(0,s.jsx)(b.z,{text:JSON.stringify(I,null,2),language:"yaml",showCopyCodeButton:!0})})})]})})]})})]}):(0,s.jsxs)(p.Y,{themeId:"tool",children:[(0,s.jsx)(u.Y,{title:"Not Found"}),(0,s.jsx)(y.U,{children:(0,s.jsx)(i.A,{children:"PlanPolicy not found"})})]})}}}]);
2
+ //# sourceMappingURL=8365.75ea3581.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static/8365.75ea3581.chunk.js","mappings":"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","sources":["webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/icons/ArrowBack.js","webpack://internal.plugin-kuadrant/./src/components/PlanPolicyDetailPage/PlanPolicyDetailPage.tsx"],"sourcesContent":["\"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: \"M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z\"\n}), 'ArrowBack');\n\nexports.default = _default;","import React from 'react';\nimport { useParams, useNavigate } from 'react-router-dom';\nimport { Typography, Box, Card, CardContent, CardHeader, Grid, Chip, Button, Accordion, AccordionSummary, AccordionDetails } from '@material-ui/core';\nimport {\n Header,\n Page,\n Content,\n Progress,\n ResponseErrorPanel,\n CodeSnippet,\n InfoCard,\n} from '@backstage/core-components';\nimport useAsync from 'react-use/lib/useAsync';\nimport { useApi, configApiRef, fetchApiRef } from '@backstage/core-plugin-api';\nimport ArrowBackIcon from '@material-ui/icons/ArrowBack';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport { PlanPolicy } from '../../types/api-management';\n\nexport const PlanPolicyDetailPage = () => {\n const { namespace, name } = useParams<{\n namespace: string;\n name: string;\n }>();\n const navigate = useNavigate();\n const config = useApi(configApiRef);\n const fetchApi = useApi(fetchApiRef);\n const backendUrl = config.getString('backend.baseUrl');\n\n const { value: planPolicy, loading, error } = useAsync(async (): Promise<PlanPolicy> => {\n const response = await fetchApi.fetch(`${backendUrl}/api/kuadrant/planpolicies/${namespace}/${name}`);\n if (!response.ok) {\n throw new Error(`Failed to fetch PlanPolicy: ${response.status}`);\n }\n return await response.json();\n }, [backendUrl, namespace, name, fetchApi]);\n\n const formatLimits = (limits: any): string[] => {\n if (!limits) return [];\n return Object.entries(limits).map(([period, value]) => `${value} per ${period}`);\n };\n\n if (loading) {\n return (\n <Page themeId=\"tool\">\n <Header title=\"Loading...\" />\n <Content>\n <Progress />\n </Content>\n </Page>\n );\n }\n\n if (error) {\n return (\n <Page themeId=\"tool\">\n <Header title=\"Error\" />\n <Content>\n <ResponseErrorPanel error={error} />\n </Content>\n </Page>\n );\n }\n\n if (!planPolicy) {\n return (\n <Page themeId=\"tool\">\n <Header title=\"Not Found\" />\n <Content>\n <Typography>PlanPolicy not found</Typography>\n </Content>\n </Page>\n );\n }\n\n return (\n <Page themeId=\"tool\">\n <Header title={planPolicy.metadata.name} subtitle={`PlanPolicy in ${planPolicy.metadata.namespace}`}>\n <Button\n variant=\"outlined\"\n startIcon={<ArrowBackIcon />}\n onClick={() => navigate('/kuadrant')}\n >\n Back to Kuadrant\n </Button>\n </Header>\n <Content>\n <Grid container spacing={3}>\n {/* Target Reference Section */}\n <Grid item xs={12}>\n <InfoCard title=\"Target Reference\">\n <Box p={2}>\n <Grid container spacing={2}>\n <Grid item xs={12} md={4}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Kind\n </Typography>\n <Typography variant=\"body1\">\n <strong>{planPolicy.spec.targetRef.kind}</strong>\n </Typography>\n </Grid>\n <Grid item xs={12} md={4}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Name\n </Typography>\n <Typography variant=\"body1\">\n <strong>{planPolicy.spec.targetRef.name}</strong>\n </Typography>\n </Grid>\n <Grid item xs={12} md={4}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Namespace\n </Typography>\n <Typography variant=\"body1\">\n <strong>{planPolicy.spec.targetRef.namespace || planPolicy.metadata.namespace}</strong>\n </Typography>\n </Grid>\n </Grid>\n </Box>\n </InfoCard>\n </Grid>\n\n {/* Plan Tiers Section */}\n <Grid item xs={12}>\n <InfoCard title=\"Plan Tiers\">\n <Box p={2}>\n <Grid container spacing={2}>\n {planPolicy.spec.plans.map((plan, index) => (\n <Grid item xs={12} md={6} lg={4} key={index}>\n <Card variant=\"outlined\">\n <CardHeader\n title={\n <Box display=\"flex\" alignItems=\"center\" style={{ gap: 8 }}>\n <Chip label={plan.tier} color=\"primary\" />\n </Box>\n }\n />\n <CardContent>\n {/* Rate Limits */}\n <Typography variant=\"body2\" color=\"textSecondary\" gutterBottom>\n Rate Limits\n </Typography>\n {plan.limits && formatLimits(plan.limits).map((limit, idx) => (\n <Typography key={idx} variant=\"body1\" gutterBottom>\n {limit}\n </Typography>\n ))}\n\n {/* Predicate */}\n {plan.predicate && (\n <Box mt={2}>\n <Typography variant=\"body2\" color=\"textSecondary\" gutterBottom>\n Predicate (CEL)\n </Typography>\n <Box\n p={1}\n style={{\n backgroundColor: '#f5f5f5',\n borderRadius: 4,\n fontFamily: 'monospace',\n fontSize: '0.875rem',\n overflow: 'auto'\n }}\n >\n <pre style={{ margin: 0, whiteSpace: 'pre-wrap', wordBreak: 'break-word', color: '#333' }}>\n {plan.predicate}\n </pre>\n </Box>\n </Box>\n )}\n </CardContent>\n </Card>\n </Grid>\n ))}\n </Grid>\n </Box>\n </InfoCard>\n </Grid>\n\n {/* Status Conditions Section */}\n {planPolicy.status?.conditions && planPolicy.status.conditions.length > 0 && (\n <Grid item xs={12}>\n <InfoCard title=\"Status Conditions\">\n <Box p={2}>\n <Grid container spacing={2}>\n {planPolicy.status.conditions.map((condition, index) => (\n <Grid item xs={12} key={index}>\n <Card\n variant=\"outlined\"\n style={{\n borderColor: condition.status === 'True' ? '#4caf50' :\n condition.status === 'False' ? '#f44336' : '#ff9800'\n }}\n >\n <CardContent>\n <Box display=\"flex\" alignItems=\"center\" justifyContent=\"space-between\">\n <Typography variant=\"h6\">{condition.type}</Typography>\n <Chip\n label={condition.status}\n color={condition.status === 'True' ? 'primary' : 'default'}\n size=\"small\"\n />\n </Box>\n {condition.reason && (\n <Typography variant=\"body2\" color=\"textSecondary\" style={{ marginTop: 8 }}>\n <strong>Reason:</strong> {condition.reason}\n </Typography>\n )}\n {condition.message && (\n <Typography variant=\"body2\" style={{ marginTop: 4 }}>\n {condition.message}\n </Typography>\n )}\n {condition.lastTransitionTime && (\n <Typography variant=\"caption\" color=\"textSecondary\" style={{ marginTop: 8, display: 'block' }}>\n Last transition: {new Date(condition.lastTransitionTime).toLocaleString()}\n </Typography>\n )}\n </CardContent>\n </Card>\n </Grid>\n ))}\n </Grid>\n </Box>\n </InfoCard>\n </Grid>\n )}\n\n {/* YAML View Section */}\n <Grid item xs={12}>\n <Accordion>\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\n <Typography variant=\"h6\">View Full YAML</Typography>\n </AccordionSummary>\n <AccordionDetails>\n <Box width=\"100%\">\n <CodeSnippet\n text={JSON.stringify(planPolicy, null, 2)}\n language=\"yaml\"\n showCopyCodeButton\n />\n </Box>\n </AccordionDetails>\n </Accordion>\n </Grid>\n </Grid>\n </Content>\n </Page>\n );\n};\n"],"names":["_interopRequireDefault","_interopRequireWildcard","exports","React","_default","default","createElement","d","PlanPolicyDetailPage","planPolicy","namespace","name","useParams","navigate","useNavigate","config","useApi","configApiRef","fetchApi","fetchApiRef","backendUrl","getString","value","loading","error","useAsync","async","response","fetch","ok","Error","status","json","Page","themeId","Header","title","Content","Progress","ResponseErrorPanel","metadata","subtitle","Button","variant","startIcon","ArrowBackIcon","onClick","Grid","container","spacing","item","xs","InfoCard","Box","p","md","Typography","color","strong","spec","targetRef","kind","plans","map","plan","index","lg","Card","CardHeader","display","alignItems","style","gap","Chip","label","tier","CardContent","gutterBottom","limits","Object","entries","period","limit","idx","predicate","mt","backgroundColor","borderRadius","fontFamily","fontSize","overflow","pre","margin","whiteSpace","wordBreak","conditions","length","condition","borderColor","justifyContent","type","size","reason","marginTop","message","lastTransitionTime","Date","toLocaleString","Accordion","AccordionSummary","expandIcon","ExpandMoreIcon","AccordionDetails","width","CodeSnippet","text","JSON","stringify","language","showCopyCodeButton"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunkinternal_plugin_kuadrant=self.webpackChunkinternal_plugin_kuadrant||[]).push([[8617],{18466:(e,t,n)=>{var a=n(4293),r=n(78920);t.A=void 0;var i=r(n(95478)),o=(0,a(n(74044)).default)(i.createElement("path",{d:"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"}),"Add");t.A=o},27799:(e,t,n)=>{var a=n(4293),r=n(78920);t.A=void 0;var i=r(n(95478)),o=(0,a(n(74044)).default)(i.createElement("path",{d:"M21 5v6.59l-3-3.01-4 4.01-4-4-4 4-3-3.01V5c0-1.1.9-2 2-2h14c1.1 0 2 .9 2 2zm-3 6.42l3 3.01V19c0 1.1-.9 2-2 2H5c-1.1 0-2-.9-2-2v-6.58l3 2.99 4-4 4 4 4-3.99z"}),"BrokenImage");t.A=o},32269:(e,t,n)=>{var a=n(4293),r=n(78920);t.A=void 0;var i=r(n(95478)),o=(0,a(n(74044)).default)(i.createElement("path",{d:"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"}),"Visibility");t.A=o},39590:(e,t,n)=>{var a=n(4293),r=n(78920);t.A=void 0;var i=r(n(95478)),o=(0,a(n(74044)).default)(i.createElement("path",{d:"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z"}),"Delete");t.A=o},45210:(e,t,n)=>{n.d(t,{Y:()=>L});var a=n(31085),r=n(22097),i=n(10394),o=n(64947),l=n(93453),c=n(29365),s=n(46423),p=n(5951),d=n(26343),u=n(28233),m=n(55197),g=n(37976),f=n(72501),h=n(5893),v=n(95478),A=(n(45250),n(42469),n(16098)),b=n(67550);const C=()=>{const{t:e}=(0,b.i)(A.O);return{url:"https://github.com/backstage/backstage/issues",items:[{title:e("supportConfig.default.title"),icon:"warning",links:[{title:e("supportConfig.default.linkTitle"),url:"https://github.com/backstage/backstage/blob/master/app-config.yaml"}]}]}};var x=n(27799);function y(e){const{id:t,Fallback:n=x.A,...i}=e,o=(0,r.useApp)().getSystemIcon(t)??n;return(0,a.jsx)(o,{...i})}function k(e){return(0,a.jsx)(y,{id:"help",...e})}var z=n(37725);const M=(0,g.makeStyles)({popoverList:{minWidth:260,maxWidth:400},menuItem:{whiteSpace:"normal"}},{name:"BackstageSupportButton"}),E=({icon:e})=>{const t=(0,r.useApp)(),n=e?t.getSystemIcon(e)??k:k;return(0,a.jsx)(n,{})},S=({link:e})=>(0,a.jsx)(z.N_,{to:e.url,children:e.title??e.url}),j=({item:e})=>(0,a.jsxs)(d.A,{button:!1,children:[(0,a.jsx)(s.A,{children:(0,a.jsx)(E,{icon:e.icon})}),(0,a.jsx)(p.A,{primary:e.title,secondary:e.links?.reduce((e,t,n)=>[...e,n>0&&(0,a.jsx)("br",{},n),(0,a.jsx)(S,{link:t},t.url)],[])})]});function L(e){const{t}=(0,b.i)(A.O),{title:n,items:s,children:p}=e,{items:g}=function(){const e=(0,r.useApiHolder)().get(r.configApiRef),t=e?.getOptionalConfig("app.support"),n=C();return t?{url:t.getString("url"),items:t.getConfigArray("items").flatMap(e=>({title:e.getString("title"),icon:e.getOptionalString("icon"),links:(e.getOptionalConfigArray("links")??[]).flatMap(e=>({url:e.getString("url"),title:e.getOptionalString("title")??""}))}))}:n}(),[x,y]=(0,v.useState)(!1),[z,E]=(0,v.useState)(null),S=M(),L=(0,r.useApi)(r.configApiRef).getOptionalConfig("app.support"),w=(0,h.A)(e=>e.breakpoints.down("sm")),I=e=>{E(e.currentTarget),y(!0)},O=()=>{y(!1)};return L?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(i.A,{display:"flex",ml:1,children:w?(0,a.jsx)(c.A,{color:"primary",size:"small",onClick:I,"data-testid":"support-button","aria-label":"Support",children:(0,a.jsx)(k,{})}):(0,a.jsx)(o.A,{"data-testid":"support-button","aria-label":"Support",color:"primary",onClick:I,startIcon:(0,a.jsx)(k,{}),children:t("supportButton.title")})}),(0,a.jsxs)(m.Ay,{"data-testid":"support-button-popover",open:x,anchorEl:z,anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"},onClose:O,children:[(0,a.jsxs)(u.A,{className:S.popoverList,autoFocusItem:Boolean(z),children:[n&&(0,a.jsx)(d.A,{button:!1,alignItems:"flex-start",className:S.menuItem,children:(0,a.jsx)(f.A,{variant:"subtitle1",children:n})}),v.Children.map(p,(e,t)=>(0,a.jsx)(d.A,{button:!1,alignItems:"flex-start",className:S.menuItem,children:e},`child-${t}`)),(s??g).map((e,t)=>(0,a.jsx)(j,{item:e},`item-${t}`))]}),(0,a.jsx)(l.A,{children:(0,a.jsx)(o.A,{color:"primary",onClick:O,"aria-label":"Close",children:t("supportButton.close")})})]})]}):null}},55429:(e,t,n)=>{var a=n(4293),r=n(78920);t.A=void 0;var i=r(n(95478)),o=(0,a(n(74044)).default)(i.createElement("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"}),"CheckCircle");t.A=o},61524:(e,t,n)=>{var a=n(4293),r=n(78920);t.A=void 0;var i=r(n(95478)),o=(0,a(n(74044)).default)(i.createElement("path",{d:"M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46C3.08 8.3 1.78 10.02 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78l3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z"}),"VisibilityOff");t.A=o},84441:(e,t,n)=>{n.d(t,{A:()=>x});var a=n(39850),r=n(89575),i=n(95478);function o(e){var t,n,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=o(e[t]))&&(a&&(a+=" "),a+=n);else for(t in e)e[t]&&(a&&(a+=" "),a+=t);return a}const l=function(){for(var e,t,n=0,a="";n<arguments.length;)(e=arguments[n++])&&(t=o(e))&&(a&&(a+=" "),a+=t);return a};var c=n(37976),s=n(4321),p=n(38483);const d=(0,p.A)(i.createElement("path",{d:"M20,12A8,8 0 0,1 12,20A8,8 0 0,1 4,12A8,8 0 0,1 12,4C12.76,4 13.5,4.11 14.2, 4.31L15.77,2.74C14.61,2.26 13.34,2 12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0, 0 22,12M7.91,10.08L6.5,11.5L11,16L21,6L19.59,4.58L11,13.17L7.91,10.08Z"}),"SuccessOutlined"),u=(0,p.A)(i.createElement("path",{d:"M12 5.99L19.53 19H4.47L12 5.99M12 2L1 21h22L12 2zm1 14h-2v2h2v-2zm0-6h-2v4h2v-4z"}),"ReportProblemOutlined"),m=(0,p.A)(i.createElement("path",{d:"M11 15h2v2h-2zm0-8h2v6h-2zm.99-5C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"}),"ErrorOutline"),g=(0,p.A)(i.createElement("path",{d:"M11,9H13V7H11M12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4C16.41,4 20,7.59 20, 12C20,16.41 16.41,20 12,20M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10, 10 0 0,0 12,2M11,17H13V11H11V17Z"}),"InfoOutlined"),f=(0,p.A)(i.createElement("path",{d:"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"}),"Close");var h=n(29365),v=n(11192),A={success:i.createElement(d,{fontSize:"inherit"}),warning:i.createElement(u,{fontSize:"inherit"}),error:i.createElement(m,{fontSize:"inherit"}),info:i.createElement(g,{fontSize:"inherit"})},b=i.createElement(f,{fontSize:"small"}),C=i.forwardRef(function(e,t){var n=e.action,o=e.children,c=e.classes,p=e.className,d=e.closeText,u=void 0===d?"Close":d,m=e.color,g=e.icon,f=e.iconMapping,C=void 0===f?A:f,x=e.onClose,y=e.role,k=void 0===y?"alert":y,z=e.severity,M=void 0===z?"success":z,E=e.variant,S=void 0===E?"standard":E,j=(0,a.A)(e,["action","children","classes","className","closeText","color","icon","iconMapping","onClose","role","severity","variant"]);return i.createElement(s.A,(0,r.A)({role:k,square:!0,elevation:0,className:l(c.root,c["".concat(S).concat((0,v.A)(m||M))],p),ref:t},j),!1!==g?i.createElement("div",{className:c.icon},g||C[M]||A[M]):null,i.createElement("div",{className:c.message},o),null!=n?i.createElement("div",{className:c.action},n):null,null==n&&x?i.createElement("div",{className:c.action},i.createElement(h.A,{size:"small","aria-label":u,title:u,color:"inherit",onClick:x},b)):null)});const x=(0,c.withStyles)(function(e){var t="light"===e.palette.type?c.darken:c.lighten,n="light"===e.palette.type?c.lighten:c.darken;return{root:(0,r.A)({},e.typography.body2,{borderRadius:e.shape.borderRadius,backgroundColor:"transparent",display:"flex",padding:"6px 16px"}),standardSuccess:{color:t(e.palette.success.main,.6),backgroundColor:n(e.palette.success.main,.9),"& $icon":{color:e.palette.success.main}},standardInfo:{color:t(e.palette.info.main,.6),backgroundColor:n(e.palette.info.main,.9),"& $icon":{color:e.palette.info.main}},standardWarning:{color:t(e.palette.warning.main,.6),backgroundColor:n(e.palette.warning.main,.9),"& $icon":{color:e.palette.warning.main}},standardError:{color:t(e.palette.error.main,.6),backgroundColor:n(e.palette.error.main,.9),"& $icon":{color:e.palette.error.main}},outlinedSuccess:{color:t(e.palette.success.main,.6),border:"1px solid ".concat(e.palette.success.main),"& $icon":{color:e.palette.success.main}},outlinedInfo:{color:t(e.palette.info.main,.6),border:"1px solid ".concat(e.palette.info.main),"& $icon":{color:e.palette.info.main}},outlinedWarning:{color:t(e.palette.warning.main,.6),border:"1px solid ".concat(e.palette.warning.main),"& $icon":{color:e.palette.warning.main}},outlinedError:{color:t(e.palette.error.main,.6),border:"1px solid ".concat(e.palette.error.main),"& $icon":{color:e.palette.error.main}},filledSuccess:{color:"#fff",fontWeight:e.typography.fontWeightMedium,backgroundColor:e.palette.success.main},filledInfo:{color:"#fff",fontWeight:e.typography.fontWeightMedium,backgroundColor:e.palette.info.main},filledWarning:{color:"#fff",fontWeight:e.typography.fontWeightMedium,backgroundColor:e.palette.warning.main},filledError:{color:"#fff",fontWeight:e.typography.fontWeightMedium,backgroundColor:e.palette.error.main},icon:{marginRight:12,padding:"7px 0",display:"flex",fontSize:22,opacity:.9},message:{padding:"8px 0"},action:{display:"flex",alignItems:"center",marginLeft:"auto",paddingLeft:16,marginRight:-8}}},{name:"MuiAlert"})(C)}}]);
2
+ //# sourceMappingURL=8617.d1dc70a8.chunk.js.map