@kuadrant/kuadrant-backstage-plugin-frontend 0.4.0-dev2-3c8348b → 0.4.0-dev3-0da0695
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.
- package/dist/.config-schema.json +46 -46
- package/dist/@mf-types.zip +0 -0
- package/dist/mf-manifest.json +1 -1
- package/dist/mf-stats.json +1 -1
- package/dist/remoteEntry.js +2 -2
- package/dist/static/{runtime.4487ce49.js → runtime.70b7537d.js} +3 -3
- package/dist/static/{runtime.4487ce49.js.map → runtime.70b7537d.js.map} +1 -1
- package/dist/static/{vendor.4487ce49.js → vendor.70b7537d.js} +1 -1
- package/dist/static/{vendor.4487ce49.js.map → vendor.70b7537d.js.map} +1 -1
- package/dist-scalprum/configSchema.json +27 -0
- package/dist-scalprum/kuadrant.kuadrant-backstage-plugin-frontend.44bacdfb1c0370d4879d.js +2 -0
- package/dist-scalprum/kuadrant.kuadrant-backstage-plugin-frontend.44bacdfb1c0370d4879d.js.map +1 -0
- package/dist-scalprum/plugin-manifest.json +11 -0
- package/dist-scalprum/static/1037.30050946.chunk.js +2 -0
- package/dist-scalprum/static/1037.30050946.chunk.js.map +1 -0
- package/dist-scalprum/static/1340.8cd13740.chunk.js +3 -0
- package/dist-scalprum/static/1340.8cd13740.chunk.js.LICENSE.txt +18 -0
- package/dist-scalprum/static/1340.8cd13740.chunk.js.map +1 -0
- package/dist-scalprum/static/1719.e8f111d8.chunk.js +2 -0
- package/dist-scalprum/static/1719.e8f111d8.chunk.js.map +1 -0
- package/dist-scalprum/static/1931.4bfc9098.chunk.js +2 -0
- package/dist-scalprum/static/1931.4bfc9098.chunk.js.map +1 -0
- package/dist-scalprum/static/20.1b5831f0.chunk.js +3 -0
- package/dist-scalprum/static/20.1b5831f0.chunk.js.LICENSE.txt +14 -0
- package/dist-scalprum/static/20.1b5831f0.chunk.js.map +1 -0
- package/dist-scalprum/static/2251.ff998bd6.chunk.js +2 -0
- package/dist-scalprum/static/2251.ff998bd6.chunk.js.map +1 -0
- package/dist-scalprum/static/2769.3ab6acb7.chunk.js +2 -0
- package/dist-scalprum/static/2769.3ab6acb7.chunk.js.map +1 -0
- package/dist-scalprum/static/2821.1e3d6dc4.chunk.js +2 -0
- package/dist-scalprum/static/2821.1e3d6dc4.chunk.js.map +1 -0
- package/dist-scalprum/static/2822.ce006976.chunk.js +2 -0
- package/dist-scalprum/static/2822.ce006976.chunk.js.map +1 -0
- package/dist-scalprum/static/2952.60bab809.chunk.js +2 -0
- package/dist-scalprum/static/2952.60bab809.chunk.js.map +1 -0
- package/dist-scalprum/static/2967.06a5593b.chunk.js +2 -0
- package/dist-scalprum/static/2967.06a5593b.chunk.js.map +1 -0
- package/dist-scalprum/static/3007.7481e781.chunk.js +2 -0
- package/dist-scalprum/static/3007.7481e781.chunk.js.map +1 -0
- package/dist-scalprum/static/3015.2dad3eec.chunk.js +3 -0
- package/dist-scalprum/static/3015.2dad3eec.chunk.js.LICENSE.txt +9 -0
- package/dist-scalprum/static/3015.2dad3eec.chunk.js.map +1 -0
- package/dist-scalprum/static/3144.cbed804d.chunk.js +3 -0
- package/dist-scalprum/static/3144.cbed804d.chunk.js.LICENSE.txt +19 -0
- package/dist-scalprum/static/3144.cbed804d.chunk.js.map +1 -0
- package/dist-scalprum/static/327.a377854c.chunk.js +2 -0
- package/dist-scalprum/static/327.a377854c.chunk.js.map +1 -0
- package/dist-scalprum/static/3657.68703526.chunk.js +3 -0
- package/dist-scalprum/static/3657.68703526.chunk.js.LICENSE.txt +8 -0
- package/dist-scalprum/static/3657.68703526.chunk.js.map +1 -0
- package/dist-scalprum/static/3658.8a3da139.chunk.js +2 -0
- package/dist-scalprum/static/3658.8a3da139.chunk.js.map +1 -0
- package/dist-scalprum/static/3897.53c31fae.chunk.js +2 -0
- package/dist-scalprum/static/3897.53c31fae.chunk.js.map +1 -0
- package/dist-scalprum/static/3917.f6c5d76f.chunk.js +2 -0
- package/dist-scalprum/static/3917.f6c5d76f.chunk.js.map +1 -0
- package/dist-scalprum/static/3947.cd00bcd5.chunk.js +2 -0
- package/dist-scalprum/static/3947.cd00bcd5.chunk.js.map +1 -0
- package/dist-scalprum/static/4041.12a0055c.chunk.js +3 -0
- package/dist-scalprum/static/4041.12a0055c.chunk.js.LICENSE.txt +9 -0
- package/dist-scalprum/static/4041.12a0055c.chunk.js.map +1 -0
- package/dist-scalprum/static/4083.e067ea26.chunk.js +3 -0
- package/dist-scalprum/static/4083.e067ea26.chunk.js.LICENSE.txt +18 -0
- package/dist-scalprum/static/4083.e067ea26.chunk.js.map +1 -0
- package/dist-scalprum/static/438.32c3e072.chunk.js +2 -0
- package/dist-scalprum/static/438.32c3e072.chunk.js.map +1 -0
- package/dist-scalprum/static/4491.b4aa3375.chunk.js +2 -0
- package/dist-scalprum/static/4491.b4aa3375.chunk.js.map +1 -0
- package/dist-scalprum/static/4570.f63a94b5.chunk.js +3 -0
- package/dist-scalprum/static/4570.f63a94b5.chunk.js.LICENSE.txt +16 -0
- package/dist-scalprum/static/4570.f63a94b5.chunk.js.map +1 -0
- package/dist-scalprum/static/4641.afa4b7f4.chunk.js +2 -0
- package/dist-scalprum/static/4641.afa4b7f4.chunk.js.map +1 -0
- package/dist-scalprum/static/4712.32c000f9.chunk.js +2 -0
- package/dist-scalprum/static/4712.32c000f9.chunk.js.map +1 -0
- package/dist-scalprum/static/501.c053f97a.chunk.js +3 -0
- package/dist-scalprum/static/501.c053f97a.chunk.js.LICENSE.txt +21 -0
- package/dist-scalprum/static/501.c053f97a.chunk.js.map +1 -0
- package/dist-scalprum/static/5010.95aedf8d.chunk.js +3 -0
- package/dist-scalprum/static/5010.95aedf8d.chunk.js.LICENSE.txt +17 -0
- package/dist-scalprum/static/5010.95aedf8d.chunk.js.map +1 -0
- package/dist-scalprum/static/5197.c4151d55.chunk.js +2 -0
- package/dist-scalprum/static/5197.c4151d55.chunk.js.map +1 -0
- package/dist-scalprum/static/5943.d01f37ae.chunk.js +2 -0
- package/dist-scalprum/static/5943.d01f37ae.chunk.js.map +1 -0
- package/dist-scalprum/static/6038.9e308c20.chunk.js +3 -0
- package/dist-scalprum/static/6038.9e308c20.chunk.js.LICENSE.txt +8 -0
- package/dist-scalprum/static/6038.9e308c20.chunk.js.map +1 -0
- package/dist-scalprum/static/6272.98ac64ee.chunk.js +2 -0
- package/dist-scalprum/static/6272.98ac64ee.chunk.js.map +1 -0
- package/dist-scalprum/static/635.20cc75bd.chunk.js +3 -0
- package/dist-scalprum/static/635.20cc75bd.chunk.js.LICENSE.txt +9 -0
- package/dist-scalprum/static/635.20cc75bd.chunk.js.map +1 -0
- package/dist-scalprum/static/6371.bd298779.chunk.js +3 -0
- package/dist-scalprum/static/6371.bd298779.chunk.js.LICENSE.txt +9 -0
- package/dist-scalprum/static/6371.bd298779.chunk.js.map +1 -0
- package/dist-scalprum/static/6766.6766.d233128d.css +5 -0
- package/dist-scalprum/static/6766.6766.d233128d.css.map +1 -0
- package/dist-scalprum/static/6766.b1477b1f.chunk.js +3 -0
- package/dist-scalprum/static/6766.b1477b1f.chunk.js.LICENSE.txt +26 -0
- package/dist-scalprum/static/6766.b1477b1f.chunk.js.map +1 -0
- package/dist-scalprum/static/6837.daf44d4a.chunk.js +2 -0
- package/dist-scalprum/static/6837.daf44d4a.chunk.js.map +1 -0
- package/dist-scalprum/static/6853.95bdb23a.chunk.js +2 -0
- package/dist-scalprum/static/6853.95bdb23a.chunk.js.map +1 -0
- package/dist-scalprum/static/6972.67a3d5fa.chunk.js +2 -0
- package/dist-scalprum/static/6972.67a3d5fa.chunk.js.map +1 -0
- package/dist-scalprum/static/7076.a421f17a.chunk.js +2 -0
- package/dist-scalprum/static/7076.a421f17a.chunk.js.map +1 -0
- package/dist-scalprum/static/7164.3f49dba5.chunk.js +2 -0
- package/dist-scalprum/static/7164.3f49dba5.chunk.js.map +1 -0
- package/dist-scalprum/static/7266.8f906280.chunk.js +2 -0
- package/dist-scalprum/static/7266.8f906280.chunk.js.map +1 -0
- package/dist-scalprum/static/7270.fe2b531a.chunk.js +2 -0
- package/dist-scalprum/static/7270.fe2b531a.chunk.js.map +1 -0
- package/dist-scalprum/static/7293.61ba27ef.chunk.js +3 -0
- package/dist-scalprum/static/7293.61ba27ef.chunk.js.LICENSE.txt +9 -0
- package/dist-scalprum/static/7293.61ba27ef.chunk.js.map +1 -0
- package/dist-scalprum/static/7367.7f02a435.chunk.js +3 -0
- package/dist-scalprum/static/7367.7f02a435.chunk.js.LICENSE.txt +21 -0
- package/dist-scalprum/static/7367.7f02a435.chunk.js.map +1 -0
- package/dist-scalprum/static/7651.e4257476.chunk.js +2 -0
- package/dist-scalprum/static/7651.e4257476.chunk.js.map +1 -0
- package/dist-scalprum/static/7791.8fd95e78.chunk.js +2 -0
- package/dist-scalprum/static/7791.8fd95e78.chunk.js.map +1 -0
- package/dist-scalprum/static/8170.ee2d7c50.chunk.js +2 -0
- package/dist-scalprum/static/8170.ee2d7c50.chunk.js.map +1 -0
- package/dist-scalprum/static/8563.c70c61a5.chunk.js +3 -0
- package/dist-scalprum/static/8563.c70c61a5.chunk.js.LICENSE.txt +5 -0
- package/dist-scalprum/static/8563.c70c61a5.chunk.js.map +1 -0
- package/dist-scalprum/static/9400.6b78af9f.chunk.js +2 -0
- package/dist-scalprum/static/9400.6b78af9f.chunk.js.map +1 -0
- package/dist-scalprum/static/empty-state-illustration.7e3ad5a9..png +0 -0
- package/dist-scalprum/static/exposed-ApiIcon.da16b2cc.chunk.js +3 -0
- package/dist-scalprum/static/exposed-ApiIcon.da16b2cc.chunk.js.LICENSE.txt +9 -0
- package/dist-scalprum/static/exposed-ApiIcon.da16b2cc.chunk.js.map +1 -0
- package/dist-scalprum/static/exposed-KuadrantIcon.e9227839.chunk.js +3 -0
- package/dist-scalprum/static/exposed-KuadrantIcon.e9227839.chunk.js.LICENSE.txt +9 -0
- package/dist-scalprum/static/exposed-KuadrantIcon.e9227839.chunk.js.map +1 -0
- package/dist-scalprum/static/exposed-KuadrantPage.832aec5b.chunk.js +2 -0
- package/dist-scalprum/static/exposed-KuadrantPage.832aec5b.chunk.js.map +1 -0
- package/dist-scalprum/static/exposed-PluginRoot.daa5f940.chunk.js +2 -0
- package/dist-scalprum/static/exposed-PluginRoot.daa5f940.chunk.js.map +1 -0
- package/dist-scalprum/static/exposed-kuadrantApiFactory.3211b81a.chunk.js +2 -0
- package/dist-scalprum/static/exposed-kuadrantApiFactory.3211b81a.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter/lowlight-import.6ce6e76b.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter/lowlight-import.6ce6e76b.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_abnf.d7b748b1.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_abnf.d7b748b1.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_accesslog.5cd4e70c.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_accesslog.5cd4e70c.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_actionscript.d7fb5ca9.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_actionscript.d7fb5ca9.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_ada.751ec93b.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_ada.751ec93b.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_angelscript.cdb860cc.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_angelscript.cdb860cc.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_apache.7773ba3b.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_apache.7773ba3b.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_applescript.8cb340cc.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_applescript.8cb340cc.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_arcade.60bbff04.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_arcade.60bbff04.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_arduino.c0c83f48.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_arduino.c0c83f48.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_armasm.430c8942.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_armasm.430c8942.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_asciidoc.3e211a5e.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_asciidoc.3e211a5e.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_aspectj.3d32ac5c.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_aspectj.3d32ac5c.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_autohotkey.0f43909c.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_autohotkey.0f43909c.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_autoit.7136d2bd.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_autoit.7136d2bd.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_avrasm.8aa64d3e.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_avrasm.8aa64d3e.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_awk.ad458763.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_awk.ad458763.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_axapta.973d343c.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_axapta.973d343c.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_bash.e6565209.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_bash.e6565209.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_basic.0691a169.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_basic.0691a169.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_bnf.e8daf1f7.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_bnf.e8daf1f7.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_brainfuck.e196d223.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_brainfuck.e196d223.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_c.efabbf9d.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_c.efabbf9d.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_cLike.3b61cf62.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_cLike.3b61cf62.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_cal.b801b70d.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_cal.b801b70d.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_capnproto.ded99d02.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_capnproto.ded99d02.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_ceylon.3eac73f9.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_ceylon.3eac73f9.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_clean.b07854cb.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_clean.b07854cb.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_clojure.77521689.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_clojure.77521689.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_clojureRepl.9448b879.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_clojureRepl.9448b879.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_cmake.6b048c9a.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_cmake.6b048c9a.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_coffeescript.4aef666e.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_coffeescript.4aef666e.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_coq.bb2ee554.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_coq.bb2ee554.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_cos.6fc48d6d.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_cos.6fc48d6d.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_cpp.daf37e10.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_cpp.daf37e10.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_crmsh.d547f78d.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_crmsh.d547f78d.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_crystal.5049cd2e.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_crystal.5049cd2e.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_csharp.315865a3.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_csharp.315865a3.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_csp.7ea55553.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_csp.7ea55553.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_css.3117b0e3.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_css.3117b0e3.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_d.7456f80c.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_d.7456f80c.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_dart.020b9d3d.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_dart.020b9d3d.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_delphi.86aca306.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_delphi.86aca306.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_diff.0a835926.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_diff.0a835926.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_django.a135aa8b.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_django.a135aa8b.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_dns.27aec10d.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_dns.27aec10d.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_dockerfile.958aacec.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_dockerfile.958aacec.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_dos.59aaced7.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_dos.59aaced7.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_dsconfig.8b5a847e.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_dsconfig.8b5a847e.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_dts.6e3f9db6.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_dts.6e3f9db6.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_dust.7c5d23e5.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_dust.7c5d23e5.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_ebnf.db0ae456.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_ebnf.db0ae456.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_elixir.cc785691.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_elixir.cc785691.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_elm.66841734.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_elm.66841734.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_erb.b1b96b4e.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_erb.b1b96b4e.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_erlang.34d2f773.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_erlang.34d2f773.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_erlangRepl.0ff0bfbb.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_erlangRepl.0ff0bfbb.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_excel.04bd2aa2.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_excel.04bd2aa2.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_fix.0ef6442e.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_fix.0ef6442e.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_flix.a1b295ac.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_flix.a1b295ac.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_fortran.66f10825.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_fortran.66f10825.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_fsharp.f36c83d1.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_fsharp.f36c83d1.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_gams.e170e44f.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_gams.e170e44f.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_gauss.877c22cd.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_gauss.877c22cd.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_gcode.c1e0a697.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_gcode.c1e0a697.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_gherkin.934843e3.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_gherkin.934843e3.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_glsl.967148b0.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_glsl.967148b0.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_gml.1e9b8477.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_gml.1e9b8477.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_go.5796d462.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_go.5796d462.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_golo.453ebb0f.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_golo.453ebb0f.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_gradle.848e9531.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_gradle.848e9531.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_groovy.fa7fe849.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_groovy.fa7fe849.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_haml.8caef7cd.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_haml.8caef7cd.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_handlebars.5a49c928.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_handlebars.5a49c928.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_haskell.b13e9820.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_haskell.b13e9820.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_haxe.2978dc06.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_haxe.2978dc06.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_hsp.7a3e965f.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_hsp.7a3e965f.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_htmlbars.f0f2b2be.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_htmlbars.f0f2b2be.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_http.a29b3997.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_http.a29b3997.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_hy.9cf3d54c.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_hy.9cf3d54c.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_inform7.568e42d6.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_inform7.568e42d6.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_ini.003b4149.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_ini.003b4149.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_irpf90.6a198fc7.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_irpf90.6a198fc7.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_isbl.e9cf6e08.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_isbl.e9cf6e08.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_java.c96464e0.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_java.c96464e0.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_javascript.e88c5129.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_javascript.e88c5129.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_jbossCli.83466530.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_jbossCli.83466530.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_json.b7395612.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_json.b7395612.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_julia.fe310a0e.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_julia.fe310a0e.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_juliaRepl.f0bdb034.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_juliaRepl.f0bdb034.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_kotlin.b08b90f3.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_kotlin.b08b90f3.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_lasso.e5dd3415.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_lasso.e5dd3415.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_latex.70a85a56.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_latex.70a85a56.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_ldif.17ed8595.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_ldif.17ed8595.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_leaf.9e81ae3b.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_leaf.9e81ae3b.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_less.2d706a4a.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_less.2d706a4a.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_lisp.e09ffb38.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_lisp.e09ffb38.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_livecodeserver.fb7fa1bd.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_livecodeserver.fb7fa1bd.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_livescript.0367b344.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_livescript.0367b344.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_llvm.b7b471df.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_llvm.b7b471df.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_lsl.3703d3d6.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_lsl.3703d3d6.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_lua.d066f704.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_lua.d066f704.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_makefile.db532360.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_makefile.db532360.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_markdown.15a4f8b6.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_markdown.15a4f8b6.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_mathematica.12cc49c0.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_mathematica.12cc49c0.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_matlab.c4d4eb67.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_matlab.c4d4eb67.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_maxima.60c478c0.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_maxima.60c478c0.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_mel.b80a6243.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_mel.b80a6243.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_mercury.d1e79a83.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_mercury.d1e79a83.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_mipsasm.e89f0d76.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_mipsasm.e89f0d76.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_mizar.2fad9b33.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_mizar.2fad9b33.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_mojolicious.fdf944aa.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_mojolicious.fdf944aa.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_monkey.e5ec6191.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_monkey.e5ec6191.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_moonscript.f2b66b70.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_moonscript.f2b66b70.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_n1ql.6cf400a2.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_n1ql.6cf400a2.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_nginx.69236b3b.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_nginx.69236b3b.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_nim.00b5534b.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_nim.00b5534b.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_nix.f66b6002.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_nix.f66b6002.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_nodeRepl.81666346.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_nodeRepl.81666346.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_nsis.0625e6b8.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_nsis.0625e6b8.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_objectivec.a72cf24d.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_objectivec.a72cf24d.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_ocaml.e259908f.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_ocaml.e259908f.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_oneC.66abc520.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_oneC.66abc520.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_openscad.3f645414.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_openscad.3f645414.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_oxygene.157adfc8.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_oxygene.157adfc8.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_parser3.6e413f5e.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_parser3.6e413f5e.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_perl.47014ef1.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_perl.47014ef1.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_pf.1af1f4b3.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_pf.1af1f4b3.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_pgsql.38660a92.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_pgsql.38660a92.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_php.e92f0640.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_php.e92f0640.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_phpTemplate.0372e2e4.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_phpTemplate.0372e2e4.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_plaintext.1b08385e.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_plaintext.1b08385e.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_pony.7d0f6ed2.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_pony.7d0f6ed2.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_powershell.d1b10369.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_powershell.d1b10369.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_processing.f638243c.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_processing.f638243c.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_profile.4c36bffa.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_profile.4c36bffa.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_prolog.f3254a38.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_prolog.f3254a38.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_properties.7a043394.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_properties.7a043394.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_protobuf.fdc8230f.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_protobuf.fdc8230f.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_puppet.6e63451e.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_puppet.6e63451e.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_purebasic.517c935e.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_purebasic.517c935e.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_python.ac43344f.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_python.ac43344f.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_pythonRepl.dda4b87c.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_pythonRepl.dda4b87c.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_q.05aa4cef.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_q.05aa4cef.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_qml.19d8a2a9.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_qml.19d8a2a9.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_r.6092a281.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_r.6092a281.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_reasonml.920f9a7c.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_reasonml.920f9a7c.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_rib.18a94d89.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_rib.18a94d89.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_roboconf.7c9e7cd0.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_roboconf.7c9e7cd0.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_routeros.80a5fd04.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_routeros.80a5fd04.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_rsl.f4a97f7d.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_rsl.f4a97f7d.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_ruby.47ccba90.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_ruby.47ccba90.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_ruleslanguage.d7509115.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_ruleslanguage.d7509115.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_rust.a254cc81.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_rust.a254cc81.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_sas.08cd6913.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_sas.08cd6913.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_scala.53d46ef7.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_scala.53d46ef7.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_scheme.cbfeb2ca.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_scheme.cbfeb2ca.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_scilab.69717390.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_scilab.69717390.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_scss.45023bc4.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_scss.45023bc4.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_shell.643b0f4f.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_shell.643b0f4f.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_smali.24d94a2c.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_smali.24d94a2c.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_smalltalk.a1699a88.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_smalltalk.a1699a88.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_sml.b430a4ca.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_sml.b430a4ca.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_sqf.dd4d51f6.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_sqf.dd4d51f6.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_sql.f818ddde.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_sql.f818ddde.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_sqlMore.7bf1e358.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_sqlMore.7bf1e358.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_stan.625ebea2.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_stan.625ebea2.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_stata.68a930f3.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_stata.68a930f3.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_step21.d4291027.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_step21.d4291027.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_stylus.3b7031b9.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_stylus.3b7031b9.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_subunit.e4ea5413.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_subunit.e4ea5413.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_swift.cf4ec513.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_swift.cf4ec513.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_taggerscript.0cb0578c.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_taggerscript.0cb0578c.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_tap.e2194878.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_tap.e2194878.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_tcl.9a6c577b.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_tcl.9a6c577b.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_thrift.1548e34d.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_thrift.1548e34d.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_tp.c608d992.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_tp.c608d992.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_twig.6b4054dd.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_twig.6b4054dd.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_typescript.b764ee8b.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_typescript.b764ee8b.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_vala.917594d4.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_vala.917594d4.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_vbnet.e83a46fb.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_vbnet.e83a46fb.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_vbscript.caea633d.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_vbscript.caea633d.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_vbscriptHtml.73fc4c05.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_vbscriptHtml.73fc4c05.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_verilog.93d0d327.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_verilog.93d0d327.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_vhdl.a98781bd.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_vhdl.a98781bd.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_vim.2cb77785.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_vim.2cb77785.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_x86asm.fbcd5fed.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_x86asm.fbcd5fed.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_xl.3b233004.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_xl.3b233004.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_xml.6b5feb4c.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_xml.6b5feb4c.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_xquery.4c158dae.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_xquery.4c158dae.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_yaml.1bd2dc88.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_yaml.1bd2dc88.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_zephir.e84f063b.chunk.js +2 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_zephir.e84f063b.chunk.js.map +1 -0
- package/package.json +2 -2
- /package/dist/static/{main.4487ce49.js → main.70b7537d.js} +0 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunkkuadrant_kuadrant_backstage_plugin_frontend=self.webpackChunkkuadrant_kuadrant_backstage_plugin_frontend||[]).push([[2251],{93246:(e,n,t)=>{var a=t(4293),r=t(78920);n.A=void 0;var s=r(t(95478)),i=(0,a(t(74044)).default)(s.createElement("path",{d:"M6 2v6h.01L6 8.01 10 12l-4 4 .01.01H6V22h12v-5.99h-.01L18 16l-4-4 4-3.99-.01-.01H18V2H6zm10 14.5V20H8v-3.5l4-4 4 4zm-4-5l-4-4V4h8v3.5l-4 4z"}),"HourglassEmpty");n.A=i},71407:(e,n,t)=>{var a=t(4293),r=t(78920);n.A=void 0;var s=r(t(95478)),i=(0,a(t(74044)).default)(s.createElement("path",{d:"M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"}),"MoreVert");n.A=i},77225:(e,n,t)=>{var a=t(4293),r=t(78920);n.A=void 0;var s=r(t(95478)),i=(0,a(t(74044)).default)(s.createElement("path",{d:"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z"}),"Warning");n.A=i},82251:(e,n,t)=>{t.d(n,{_:()=>V});var a=t(31085),r=t(95478),s=t(35015),i=t(82300),o=t(42367),l=t(25010),d=t(10394),c=t(72501),u=t(31653),p=t(38605),h=t(67720),m=t(71677),y=t(29365),g=t(78467),v=t(42899),A=t(64947),x=t(37757),f=t(26343),j=t(4387),b=t(22097),k=t(70980),w=t(25467),$=t(84692),C=t(32269),P=t(61524),S=t(93246),q=t(92399),T=t(18466),R=t(71407),E=t(99594),I=t(34955),z=t(46205),B=t(16325),_=t(76891),D=t(61477),K=t(46805),W=t(95061),H=t(48543),N=t(81215),G=t(16249),U=t(93453);const L=({open:e,onClose:n,onSuccess:t,request:s,availablePlans:i})=>{const o=(0,b.useApi)(k.s),[l,u]=(0,r.useState)(""),[p,h]=(0,r.useState)(""),[m,y]=(0,r.useState)(!1),[v,x]=(0,r.useState)("");(0,r.useEffect)(()=>{e&&s&&(u(s.spec.planTier||""),h(s.spec.useCase||""),x(""))},[e,s]);const j=()=>{m||(x(""),n())};return(0,a.jsxs)(_.A,{open:e,onClose:j,maxWidth:"sm",fullWidth:!0,children:[(0,a.jsx)(D.A,{children:"Edit API Key"}),(0,a.jsxs)(K.A,{children:[v&&(0,a.jsx)(d.A,{mb:2,p:2,bgcolor:"error.main",color:"error.contrastText",borderRadius:1,children:(0,a.jsx)(c.A,{variant:"body2",children:v})}),(0,a.jsxs)(W.A,{fullWidth:!0,margin:"normal",children:[(0,a.jsx)(H.A,{children:"Tier"}),(0,a.jsx)(N.A,{value:l,onChange:e=>u(e.target.value),disabled:m,children:i.map(e=>{const n=Object.entries(e.limits||{}).map(([e,n])=>`${n} per ${e}`).join(", ");return(0,a.jsxs)(f.A,{value:e.tier,children:[e.tier," ",n?`(${n})`:""]},e.tier)})})]}),(0,a.jsx)(G.A,{label:"Use Case",placeholder:"Describe how you plan to use this API",multiline:!0,rows:3,fullWidth:!0,margin:"normal",value:p,onChange:e=>h(e.target.value),disabled:m,helperText:"Explain your intended use of this API for admin review"})]}),(0,a.jsxs)(U.A,{children:[(0,a.jsx)(A.A,{onClick:j,disabled:m,children:"Cancel"}),(0,a.jsx)(A.A,{onClick:async()=>{if(l){x(""),y(!0);try{const e={spec:{planTier:l,useCase:p.trim()}};await o.updateRequest(s.metadata.name,s.metadata.namespace,e),t(),n()}catch(e){console.error("Error updating API key request:",e),x(e instanceof Error?e.message:"Unknown error occurred")}finally{y(!1)}}else x("Please select a tier")},color:"primary",variant:"contained",disabled:!l||m,startIcon:m?(0,a.jsx)(g.A,{size:16,color:"inherit"}):void 0,children:m?"Saving...":"Save Changes"})]})]})};var M=t(63221);function F(e,n,t){const a=t?`${t} `:"";return{curl:`curl -X GET ${e} \\\n -H "Authorization: ${t?`${t} ${n}`:n}"`,nodejs:`const fetch = require('node-fetch');\n\nconst apiKey = '${n}';\nconst endpoint = '${e}';\n\nfetch(endpoint, {\n method: 'GET',\n headers: {\n 'Authorization': '${a}' + apiKey\n }\n})\n .then(response => response.json())\n .then(data => console.log(data))\n .catch(error => console.error('Error:', error));`,python:`import requests\n\napi_key = '${n}'\nendpoint = '${e}'\n\nheaders = {\n 'Authorization': '${a}' + api_key\n}\n\nresponse = requests.get(endpoint, headers=headers)\nprint(response.json())`,go:`package main\n\nimport (\n "fmt"\n "net/http"\n "io"\n)\n\nfunc main() {\n apiKey := "${n}"\n endpoint := "${e}"\n\n client := &http.Client{}\n req, _ := http.NewRequest("GET", endpoint, nil)\n req.Header.Add("Authorization", "${a}" + apiKey)\n\n resp, err := client.Do(req)\n if err != nil {\n fmt.Println("Error:", err)\n return\n }\n defer resp.Body.Close()\n\n body, _ := io.ReadAll(resp.Body)\n fmt.Println(string(body))\n}`}}var X=t(14933);const V=({namespace:e})=>{var n,t,_,D,K;const{entity:W}=(0,w.tN)(),H=(0,b.useApi)($.v),N=(0,b.useApi)(k.s),G=(0,b.useApi)(b.identityApiRef),U=(0,b.useApi)(b.alertApiRef),[V,O]=(0,r.useState)(new Set),[Y,J]=(0,r.useState)(0),[Q,Z]=(0,r.useState)(""),[ee,ne]=(0,r.useState)(""),[te,ae]=(0,r.useState)(!1),[re,se]=(0,r.useState)(!1),[ie,oe]=(0,r.useState)(null),[le,de]=(0,r.useState)(null),[ce,ue]=(0,r.useState)(null),[pe,he]=(0,r.useState)(null),[me,ye]=(0,r.useState)(new Set),[ge,ve]=(0,r.useState)({open:!1,request:null}),[Ae,xe]=(0,r.useState)(new Map),[fe,je]=(0,r.useState)(new Set),be=(null===(n=W.metadata.annotations)||void 0===n?void 0:n["kuadrant.io/apiproduct"])||W.metadata.name,ke=(null===(t=W.metadata.annotations)||void 0===t?void 0:t["kuadrant.io/namespace"])||e||"default";(0,s.A)(async()=>{const e=await G.getBackstageIdentity(),n=await G.getProfileInfo();Z(e.userEntityRef);let t=n.email||"";if(!t&&e.userEntityRef){var a,r;const n=await H.getEntityByRef(e.userEntityRef);(null==n||null===(r=n.spec)||void 0===r||null===(a=r.profile)||void 0===a?void 0:a.email)&&(t=n.spec.profile.email)}ne(t)},[G]);const{value:we,loading:$e,error:Ce}=(0,s.A)(async()=>(await N.getRequestsByApiProduct(be,ke)).items||[],[be,ke,Y,N]),{value:Pe,loading:Se,error:qe}=(0,s.A)(async()=>{var e;return null===(e=(await N.getApiProducts()).items)||void 0===e?void 0:e.find(e=>e.metadata.namespace===ke&&e.metadata.name===be)},[ke,be,N]),Te=Pe?`apiproduct:${Pe.metadata.namespace}/${Pe.metadata.name}`:void 0,{allowed:Re,loading:Ee,error:Ie}=(0,z.l)(I.dp,Te),{allowed:ze,loading:Be,error:_e}=(0,z.l)(I.uL),{allowed:De,loading:Ke,error:We}=(0,z.l)(I.jH),{allowed:He,loading:Ne,error:Ge}=(0,z.l)(I.q0),Ue=()=>{de(null),ue(null)},Le=()=>{ce&&(oe(ce),se(!0),Ue())},Me=()=>{if(!ce)return;const e=ce;Ue(),ve({open:!0,request:e})},Fe=e=>{O(n=>{const t=new Set(n);return t.has(e)?t.delete(e):t.add(e),t})},Xe=(0,r.useMemo)(()=>[{render:e=>{var n;const t=e.rowData;if(!(null==t||null===(n=t.metadata)||void 0===n?void 0:n.name))return(0,a.jsx)(d.A,{});const r=`${t.metadata.namespace}/${t.metadata.name}`,s=Ae.get(r);return(0,a.jsx)(Ve,{request:t,apiName:be,revealedApiKey:s})}}],[be,Ae]),Ve=({request:e,apiName:n,revealedApiKey:t})=>{var s,o,l;const[h,m]=(0,r.useState)(0),y=(null===(s=e.status)||void 0===s?void 0:s.apiHostname)||`${n}.apps.example.com`,g=t||"<your-api-key>",v=function(e,n,t){const a=`https://${n}/api/v1/endpoint`;return e?e.authorizationHeader?F(a,t,e.authorizationHeader.prefix||""):e.customHeader?function(e,n,t,a){return{curl:`curl -X GET ${e} \\\n -H "${t}: ${a?`${a}${n}`:n}"`,nodejs:`const fetch = require('node-fetch');\n\nconst apiKey = '${n}';\nconst endpoint = '${e}';\n\nfetch(endpoint, {\n method: 'GET',\n headers: {\n '${t}': '${a}' + apiKey\n }\n})\n .then(response => response.json())\n .then(data => console.log(data))\n .catch(error => console.error('Error:', error));`,python:`import requests\n\napi_key = '${n}'\nendpoint = '${e}'\n\nheaders = {\n '${t}': '${a}' + api_key\n}\n\nresponse = requests.get(endpoint, headers=headers)\nprint(response.json())`,go:`package main\n\nimport (\n "fmt"\n "net/http"\n "io"\n)\n\nfunc main() {\n apiKey := "${n}"\n endpoint := "${e}"\n\n client := &http.Client{}\n req, _ := http.NewRequest("GET", endpoint, nil)\n req.Header.Add("${t}", "${a}" + apiKey)\n\n resp, err := client.Do(req)\n if err != nil {\n fmt.Println("Error:", err)\n return\n }\n defer resp.Body.Close()\n\n body, _ := io.ReadAll(resp.Body)\n fmt.Println(string(body))\n}`}}(a,t,e.customHeader.name,e.customHeader.prefix||""):e.queryString?function(e,n,t){return{curl:`curl -X GET "${e}?${t}=${n}"`,nodejs:`const fetch = require('node-fetch');\n\nconst apiKey = '${n}';\nconst endpoint = '${e}?${t}=' + apiKey;\n\nfetch(endpoint, {\n method: 'GET'\n})\n .then(response => response.json())\n .then(data => console.log(data))\n .catch(error => console.error('Error:', error));`,python:`import requests\n\napi_key = '${n}'\nendpoint = '${e}'\n\nparams = {\n '${t}': api_key\n}\n\nresponse = requests.get(endpoint, params=params)\nprint(response.json())`,go:`package main\n\nimport (\n "fmt"\n "net/http"\n "io"\n)\n\nfunc main() {\n apiKey := "${n}"\n endpoint := "${e}?${t}=" + apiKey\n\n client := &http.Client{}\n req, _ := http.NewRequest("GET", endpoint, nil)\n\n resp, err := client.Do(req)\n if err != nil {\n fmt.Println("Error:", err)\n return\n }\n defer resp.Body.Close()\n\n body, _ := io.ReadAll(resp.Body)\n fmt.Println(string(body))\n}`}}(a,t,e.queryString.name):e.cookie?function(e,n,t){return{curl:`curl -X GET ${e} \\\n --cookie "${t}=${n}"`,nodejs:`const fetch = require('node-fetch');\n\nconst apiKey = '${n}';\nconst endpoint = '${e}';\n\nfetch(endpoint, {\n method: 'GET',\n headers: {\n 'Cookie': '${t}=' + apiKey\n }\n})\n .then(response => response.json())\n .then(data => console.log(data))\n .catch(error => console.error('Error:', error));`,python:`import requests\n\napi_key = '${n}'\nendpoint = '${e}'\n\ncookies = {\n '${t}': api_key\n}\n\nresponse = requests.get(endpoint, cookies=cookies)\nprint(response.json())`,go:`package main\n\nimport (\n "fmt"\n "net/http"\n "io"\n)\n\nfunc main() {\n apiKey := "${n}"\n endpoint := "${e}"\n\n client := &http.Client{}\n req, _ := http.NewRequest("GET", endpoint, nil)\n req.AddCookie(&http.Cookie{\n Name: "${t}",\n Value: apiKey,\n })\n\n resp, err := client.Do(req)\n if err != nil {\n fmt.Println("Error:", err)\n return\n }\n defer resp.Body.Close()\n\n body, _ := io.ReadAll(resp.Body)\n fmt.Println(string(body))\n}`}}(a,t,e.cookie.name):F(a,t,"Bearer"):F(a,t,"Bearer")}(null===(l=e.status)||void 0===l||null===(o=l.authScheme)||void 0===o?void 0:o.credentials,y,g);return(0,a.jsxs)(d.A,{p:3,bgcolor:"background.default",onClick:e=>e.stopPropagation(),children:[e.spec.useCase&&(0,a.jsxs)(d.A,{mb:3,children:[(0,a.jsx)(c.A,{variant:"h6",gutterBottom:!0,children:"Use Case"}),(0,a.jsx)(d.A,{p:2,bgcolor:"background.paper",borderRadius:1,border:"1px solid rgba(0, 0, 0, 0.12)",children:(0,a.jsx)(c.A,{variant:"body2",style:{whiteSpace:"pre-wrap",wordBreak:"break-word",overflowWrap:"break-word"},children:e.spec.useCase})})]}),(0,a.jsx)(c.A,{variant:"h6",gutterBottom:!0,children:"Usage Examples"}),(0,a.jsxs)(c.A,{variant:"body2",paragraph:!0,children:["Use these code examples to test the API with your"," ",e.spec.planTier," tier key."]}),(0,a.jsx)(d.A,{onClick:e=>e.stopPropagation(),children:(0,a.jsxs)(u.A,{value:h,onChange:(e,n)=>{e.stopPropagation(),m(n)},indicatorColor:"primary",children:[(0,a.jsx)(p.A,{label:"cURL",onClick:e=>e.stopPropagation()}),(0,a.jsx)(p.A,{label:"Node.js",onClick:e=>e.stopPropagation()}),(0,a.jsx)(p.A,{label:"Python",onClick:e=>e.stopPropagation()}),(0,a.jsx)(p.A,{label:"Go",onClick:e=>e.stopPropagation()})]})}),(0,a.jsxs)(d.A,{mt:2,children:[0===h&&(0,a.jsx)(i.z,{text:v.curl,language:"bash",showCopyCodeButton:!0}),1===h&&(0,a.jsx)(i.z,{text:v.nodejs,language:"javascript",showCopyCodeButton:!0}),2===h&&(0,a.jsx)(i.z,{text:v.python,language:"python",showCopyCodeButton:!0}),3===h&&(0,a.jsx)(i.z,{text:v.go,language:"go",showCopyCodeButton:!0})]})]})},Oe=Ce||qe,Ye=Ie||_e||We||Ge;if($e||Se||Ee||Be||Ke||Ne)return(0,a.jsx)(d.A,{p:2,children:[...Array(5)].map((e,n)=>(0,a.jsx)(d.A,{p:2,children:(0,a.jsx)(j.A,{variant:"text",width:"100%"})},n))});if(Oe)return(0,a.jsx)(o._,{error:Oe});if(Ye){const e=Ie?"kuadrant.apikey.create":_e?"kuadrant.apikey.delete.own":We?"kuadrant.apikey.delete.all":Ge?"kuadrant.apikey.update.own":"unknown";return(0,a.jsxs)(d.A,{p:2,children:[(0,a.jsxs)(c.A,{color:"error",children:["Unable to check permissions: ",Ye.message]}),(0,a.jsxs)(c.A,{variant:"body2",color:"textSecondary",children:["Permission: ",e]}),(0,a.jsx)(c.A,{variant:"body2",color:"textSecondary",children:"Please try again or contact your administrator"})]})}const Je=(we||[]).filter(e=>!me.has(e.metadata.name)),Qe=(null==Pe||null===(_=Pe.status)||void 0===_?void 0:_.discoveredPlans)||[],Ze=Je.filter(e=>{var n;return"Pending"===(0,B.v)(null===(n=e.status)||void 0===n?void 0:n.conditions)}),en=Je.filter(e=>{var n;return"Approved"===(0,B.v)(null===(n=e.status)||void 0===n?void 0:n.conditions)}),nn=Je.filter(e=>{var n;return"Denied"===(0,B.v)(null===(n=e.status)||void 0===n?void 0:n.conditions)}),tn=[{title:"Tier",field:"spec.planTier",render:e=>(0,a.jsx)(h.A,{label:e.spec.planTier,color:"primary",size:"small"})},{title:"Approved",field:"status.conditions",render:e=>{var n,t,r;const s=null===(r=e.status)||void 0===r||null===(t=r.conditions)||void 0===t||null===(n=t.find(e=>"Approved"===e.type&&"True"===e.status))||void 0===n?void 0:n.lastTransitionTime;return(0,a.jsx)(c.A,{variant:"body2",children:s?new Date(s).toLocaleDateString():"-"})}},{title:"API Key",field:"status.secretRef",searchable:!1,filtering:!1,render:e=>{var n,t;const r=`${e.metadata.namespace}/${e.metadata.name}`,s=V.has(e.metadata.name),i=fe.has(r),o=Ae.get(r);return Boolean(null===(t=e.spec)||void 0===t||null===(n=t.secretRef)||void 0===n?void 0:n.name)?(0,a.jsxs)(d.A,{display:"flex",alignItems:"center",children:[(0,a.jsx)(c.A,{variant:"body2",style:{fontFamily:"monospace",marginRight:8},children:i?"Loading...":s&&o?o:"••••••••••••••••"}),s&&o&&(0,a.jsx)(m.Ay,{title:"Copy to clipboard",children:(0,a.jsx)(y.A,{size:"small",onClick:async()=>{o&&(await navigator.clipboard.writeText(o),U.post({message:"API key copied to clipboard",severity:"success",display:"transient"}))},children:(0,a.jsx)(E.A,{fontSize:"small"})})}),(0,a.jsx)(m.Ay,{title:s?"Hide API key":"Reveal API key",children:(0,a.jsx)("span",{children:(0,a.jsx)(y.A,{size:"small",onClick:()=>{s?(((e,n)=>{const t=`${e}/${n}`;xe(e=>{const n=new Map(e);return n.delete(t),n})})(e.metadata.namespace,e.metadata.name),Fe(e.metadata.name)):(async(e,n)=>{const t=`${e}/${n}`;if(!fe.has(t)){je(e=>new Set(e).add(t));try{const a=await N.getApiKeySecret(e,n);xe(e=>new Map(e).set(t,a.apiKey)),Fe(n)}catch(e){const n=e instanceof Error?e.message:"unknown error occurred";U.post({message:`Failed to fetch api key: ${n}`,severity:"error",display:"transient"})}finally{je(e=>{const n=new Set(e);return n.delete(t),n})}}})(e.metadata.namespace,e.metadata.name)},disabled:i,children:s?(0,a.jsx)(P.A,{}):(0,a.jsx)(C.A,{})})})})]}):(0,a.jsx)(c.A,{variant:"body2",color:"textSecondary",children:"Awaiting secret..."})}},{title:"",field:"actions",searchable:!1,filtering:!1,render:e=>{if(pe===e.metadata.name)return(0,a.jsx)(g.A,{size:20});const n=e.spec.requestedBy.userId;return(0,z.W)(n,Q,ze,De)?(0,a.jsx)(y.A,{size:"small",onClick:n=>{n.stopPropagation();const t=n.currentTarget.getBoundingClientRect();de({top:t.bottom,left:t.left}),ue(e)},title:"Actions","aria-controls":le?"actions-menu":void 0,"aria-haspopup":"true",children:(0,a.jsx)(R.A,{})}):null}}],an=[{title:"Status",field:"status.conditions",render:e=>{var n;const t=(0,B.v)((null===(n=e.status)||void 0===n?void 0:n.conditions)||[]),r="Pending"===t;return(0,a.jsx)(h.A,{label:t,size:"small",icon:r?(0,a.jsx)(S.A,{}):(0,a.jsx)(q.A,{}),color:r?"default":"secondary"})}},{title:"Tier",field:"spec.planTier",render:e=>(0,a.jsx)(h.A,{label:e.spec.planTier,color:"primary",size:"small"})},{title:"Use Case",field:"spec.useCase",render:e=>e.spec.useCase?(0,a.jsx)(m.Ay,{title:e.spec.useCase,placement:"top",children:(0,a.jsx)(c.A,{variant:"body2",style:{maxWidth:"200px",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.spec.useCase})}):(0,a.jsx)(c.A,{variant:"body2",children:"-"})},{title:"Requested",field:"metadata.creationTimestamp",render:e=>(0,a.jsx)(c.A,{variant:"body2",children:e.metadata.creationTimestamp?new Date(e.metadata.creationTimestamp).toLocaleDateString():"-"})},{title:"Reviewed",field:"status.conditions",render:e=>{var n,t,r;const s=null===(r=e.status)||void 0===r||null===(t=r.conditions)||void 0===t||null===(n=t.find(e=>("Approved"===e.type||"Denied"===e.type)&&"True"===e.status))||void 0===n?void 0:n.lastTransitionTime;return(0,a.jsx)(c.A,{variant:"body2",children:s?new Date(s).toLocaleDateString():"-"})}},{title:"",field:"actions",searchable:!1,filtering:!1,render:e=>{var n;if(pe===e.metadata.name)return(0,a.jsx)(g.A,{size:20});const t="Pending"===(0,B.v)((null===(n=e.status)||void 0===n?void 0:n.conditions)||[]),r=e.spec.requestedBy.userId,s=(0,z.W)(r,Q,ze,De);return t&&(He&&r===Q||s)?(0,a.jsx)(y.A,{size:"small",onClick:n=>{n.stopPropagation();const t=n.currentTarget.getBoundingClientRect();de({top:t.bottom,left:t.left}),ue(e)},title:"Actions","aria-controls":le?"actions-menu":void 0,"aria-haspopup":"true",children:(0,a.jsx)(R.A,{})}):null}}],rn=an.filter(e=>"Reviewed"!==e.title&&"Reason"!==e.title);return(0,a.jsxs)(d.A,{p:2,children:[(0,a.jsxs)(v.A,{container:!0,spacing:3,direction:"column",children:[Re&&(0,a.jsx)(v.A,{item:!0,children:(0,a.jsxs)(d.A,{display:"flex",flexDirection:"column",alignItems:"flex-end",mb:2,children:[(0,a.jsx)(A.A,{variant:"contained",color:"primary",startIcon:(0,a.jsx)(T.A,{}),onClick:()=>ae(!0),disabled:0===Qe.length||!ee,"data-testid":"request-api-access-button","data-plans-count":Qe.length,children:"Request API Access"}),!ee&&(0,a.jsx)(c.A,{variant:"caption",color:"textSecondary",style:{marginTop:4},"data-testid":"no-email-message",children:'"Email address is required"'}),0===Qe.length&&(0,a.jsx)(c.A,{variant:"caption",color:"textSecondary",style:{marginTop:4},"data-testid":"no-plans-message",children:Pe?(()=>{var e,n,t,a;const r=null===(n=Pe.status)||void 0===n||null===(e=n.conditions)||void 0===e?void 0:e.find(e=>"Ready"===e.type),s=null===(a=Pe.status)||void 0===a||null===(t=a.conditions)||void 0===t?void 0:t.find(e=>"PlanPolicyDiscovered"===e.type);return"True"!==(null==r?void 0:r.status)?`HTTPRoute not ready: ${(null==r?void 0:r.message)||"unknown"}`:"True"!==(null==s?void 0:s.status)?`No plans discovered: ${(null==s?void 0:s.message)||"no PlanPolicy found"}`:"No plans available"})():"API product not found"})]})}),0===Ze.length&&0===nn.length&&0===en.length&&(0,a.jsx)(v.A,{item:!0,children:(0,a.jsx)(d.A,{p:3,textAlign:"center",children:(0,a.jsx)(c.A,{variant:"body1",color:"textSecondary",children:"No API keys yet. Request access to get started."})})}),Ze.length>0&&(0,a.jsx)(v.A,{item:!0,children:(0,a.jsx)(l.X,{title:"Pending Requests",options:{paging:Ze.length>5,pageSize:20,search:!0,filtering:!0,debounceInterval:300,toolbar:!0,emptyRowsWhenPaging:!1},columns:rn,data:Ze})}),nn.length>0&&(0,a.jsx)(v.A,{item:!0,children:(0,a.jsx)(l.X,{title:"Denied Requests",options:{paging:nn.length>5,pageSize:20,search:!0,filtering:!0,debounceInterval:300,toolbar:!0,emptyRowsWhenPaging:!1},columns:an,data:nn})}),en.length>0&&(0,a.jsx)(v.A,{item:!0,children:(0,a.jsx)(l.X,{title:"API Keys",options:{paging:en.length>5,pageSize:20,search:!0,filtering:!0,debounceInterval:300,toolbar:!0,emptyRowsWhenPaging:!1},columns:tn,data:en,detailPanel:Xe},"api-keys-table")})]}),(0,a.jsx)(X.c,{open:te,onClose:()=>ae(!1),onSuccess:()=>{ae(!1),J(e=>e+1)},apiProductName:be,namespace:ke,userEmail:ee,plans:Qe}),(0,a.jsx)(x.A,{id:"actions-menu",open:Boolean(le),onClose:Ue,anchorReference:"anchorPosition",anchorPosition:le||{top:0,left:0},children:ce&&(()=>{var e;const n="Pending"===(0,B.v)((null===(e=ce.status)||void 0===e?void 0:e.conditions)||[]),t=ce.spec.requestedBy.userId,r=[];return He&&t===Q&&n&&r.push((0,a.jsx)(f.A,{onClick:Le,children:"Edit"},"edit")),r.push((0,a.jsx)(f.A,{onClick:Me,children:"Delete"},"delete")),r})()}),ie&&(0,a.jsx)(L,{open:re,onClose:()=>{se(!1),oe(null)},onSuccess:()=>{J(e=>e+1),se(!1),U.post({message:"API key updated",severity:"success",display:"transient"}),oe(null)},request:ie,availablePlans:Qe}),(0,a.jsx)(M.K,{open:ge.open,title:"Delete Request",description:`Are you sure you want to delete this ${"Approved"===(0,B.v)((null===(K=ge.request)||void 0===K||null===(D=K.status)||void 0===D?void 0:D.conditions)||[])?"API key":"request"}?`,deleting:null!==pe,onConfirm:async()=>{ge.request&&(await(async(e,n)=>{ye(e=>new Set(e).add(n)),he(n);try{await N.deleteRequest(e,n),U.post({message:"API key deleted successfully",severity:"success",display:"transient"}),J(e=>e+1)}catch(e){const t=e instanceof Error?e.message:"unknown error occurred";ye(e=>{const t=new Set(e);return t.delete(n),t}),U.post({message:`Failed to delete API key: ${t}`,severity:"error",display:"transient"})}finally{he(null)}})(ge.request.metadata.namespace,ge.request.metadata.name),ve({open:!1,request:null}))},onCancel:()=>{ve({open:!1,request:null})}})]})}},63221:(e,n,t)=>{t.d(n,{K:()=>g});var a=t(31085),r=t(95478),s=t(76891),i=t(61477),o=t(10394),l=t(46805),d=t(59461),c=t(72501),u=t(16249),p=t(93453),h=t(64947),m=t(78467),y=t(77225);const g=({open:e,title:n,description:t,confirmText:g,severity:v="normal",deleting:A=!1,onConfirm:x,onCancel:f})=>{const[j,b]=(0,r.useState)("");(0,r.useEffect)(()=>{e||b("")},[e]);const k="high"===v&&g,w=!k||j===g;return(0,a.jsxs)(s.A,{open:e,onClose:A?void 0:f,maxWidth:"sm",fullWidth:!0,children:[(0,a.jsxs)(i.A,{children:["high"===v&&(0,a.jsxs)(o.A,{display:"flex",alignItems:"center",style:{gap:8},children:[(0,a.jsx)(y.A,{color:"error"}),(0,a.jsx)("span",{children:n})]}),"high"!==v&&n]}),(0,a.jsxs)(l.A,{children:[(0,a.jsx)(d.A,{style:{whiteSpace:"pre-line"},children:t}),k&&(0,a.jsxs)(o.A,{mt:2,children:[(0,a.jsxs)(c.A,{variant:"body2",color:"textSecondary",gutterBottom:!0,children:["Type ",(0,a.jsx)("strong",{children:g})," to confirm:"]}),(0,a.jsx)(u.A,{fullWidth:!0,variant:"outlined",size:"small",value:j,onChange:e=>b(e.target.value),disabled:A,autoFocus:!0,placeholder:g})]})]}),(0,a.jsxs)(p.A,{children:[(0,a.jsx)(h.A,{onClick:f,disabled:A,children:"Cancel"}),(0,a.jsx)(h.A,{onClick:()=>{w&&x()},color:"secondary",variant:"contained",disabled:A||!w,startIcon:A?(0,a.jsx)(m.A,{size:16,color:"inherit"}):void 0,children:A?"Deleting...":"Delete"})]})]})}},14933:(e,n,t)=>{t.d(n,{c:()=>j});var a=t(31085),r=t(95478),s=t(76891),i=t(61477),o=t(46805),l=t(10394),d=t(72501),c=t(95061),u=t(48543),p=t(81215),h=t(26343),m=t(16249),y=t(93453),g=t(64947),v=t(78467),A=t(39053),x=t(22097),f=t(70980);const j=({open:e,onClose:n,onSuccess:t,apiProductName:j,namespace:b,userEmail:k,plans:w})=>{const $=(0,x.useApi)(f.s),C=(0,x.useApi)(x.alertApiRef),[P,S]=(0,r.useState)(""),[q,T]=(0,r.useState)(""),[R,E]=(0,r.useState)(!1),[I,z]=(0,r.useState)(null),B=()=>{S(""),T(""),z(null),n()};return(0,a.jsxs)(s.A,{open:e,onClose:B,maxWidth:"sm",fullWidth:!0,children:[(0,a.jsx)(i.A,{children:"Request API Access"}),(0,a.jsxs)(o.A,{children:[(0,a.jsxs)(l.A,{mb:2,p:1.5,bgcolor:"info.light",borderRadius:1,display:"flex",alignItems:"flex-start",style:{gap:8},children:[(0,a.jsx)(A.A,{color:"primary",fontSize:"small",style:{marginTop:2}}),(0,a.jsx)(d.A,{variant:"body2",children:"Your request will be reviewed by an API owner before access is granted."})]}),I&&(0,a.jsx)(l.A,{mb:2,p:2,bgcolor:"error.main",color:"error.contrastText",borderRadius:1,children:(0,a.jsx)(d.A,{variant:"body2",children:I})}),(0,a.jsxs)(c.A,{fullWidth:!0,margin:"normal",disabled:R,"data-testid":"tier-select-form",children:[(0,a.jsx)(u.A,{id:"tier-select-label",children:"Select Tier"}),(0,a.jsx)(p.A,{labelId:"tier-select-label","data-testid":"tier-select",value:P,onChange:e=>S(e.target.value),disabled:R,children:w.map(e=>{const n=Object.entries(e.limits||{}).map(([e,n])=>`${n} per ${e}`).join(", ");return(0,a.jsxs)(h.A,{value:e.tier,"data-testid":`tier-option-${e.tier}`,children:[e.tier," ",n?`(${n})`:""]},e.tier)})})]}),(0,a.jsx)(m.A,{label:"Use Case (optional)",placeholder:"Describe how you plan to use this API",multiline:!0,rows:3,fullWidth:!0,margin:"normal",value:q,onChange:e=>T(e.target.value),helperText:"Explain your intended use of this API for admin review",disabled:R})]}),(0,a.jsxs)(y.A,{children:[(0,a.jsx)(g.A,{onClick:B,disabled:R,children:"Cancel"}),(0,a.jsx)(g.A,{onClick:async()=>{if(P){E(!0),z(null);try{const e=Math.random().toString(36).substring(2,10),n=`${j}-${e}-secret`.toLowerCase().replace(/[^a-z0-9-]/g,"-"),a=crypto.randomUUID().replace(/-/g,"");await $.createSecret(n,a);try{await $.createRequest({apiProductName:j,namespace:b,planTier:P,useCase:q.trim()||"",userEmail:k,secretName:n}),C.post({message:"Request submitted successfully. Pending API owner approval.",severity:"info",display:"transient"}),S(""),T(""),t()}catch(e){try{await $.deleteSecret(n)}catch(e){console.warn("Failed to cleanup orphaned secret:",e)}throw e}}catch(e){const n=e instanceof Error?e.message:"unknown error occurred";C.post({message:`Failed to create request: ${n}`,severity:"error",display:"transient"}),z(n)}finally{E(!1)}}},color:"primary",variant:"contained",disabled:!P||R,startIcon:R?(0,a.jsx)(v.A,{size:16,color:"inherit"}):void 0,children:R?"Submitting...":"Submit Request"})]})]})}},16325:(e,n,t)=>{function a(e){return e&&0!==e.length?e.find(e=>"Approved"===e.type&&"True"===e.status)?"Approved":e.find(e=>"Denied"===e.type&&"True"===e.status)?"Denied":e.find(e=>"Failed"===e.type&&"True"===e.status)?"Failed":"Pending":"Pending"}t.d(n,{v:()=>a})},84692:(e,n,t)=>{t.d(n,{v:()=>a});const a=(0,t(22097).createApiRef)({id:"plugin.catalog.service"})}}]);
|
|
2
|
+
//# sourceMappingURL=2251.ff998bd6.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static/2251.ff998bd6.chunk.js","mappings":"+KAEAA,EAA6BC,EAAQ,MAErCC,EAA8BD,EAAQ,OAKtCE,EAAAC,OAAe,EAEf,IAAAC,EAAAH,EAAoCD,EAAQ,QAI5CK,GAAA,EAFAN,EAA4CC,EAAQ,QAEpDM,SAAAF,EAAAG,cAAA,QACAC,EAAA,gJACC,kBAEDN,EAAAC,EAAeE,uBCjBfN,EAA6BC,EAAQ,MAErCC,EAA8BD,EAAQ,OAKtCE,EAAAC,OAAe,EAEf,IAAAC,EAAAH,EAAoCD,EAAQ,QAI5CK,GAAA,EAFAN,EAA4CC,EAAQ,QAEpDM,SAAAF,EAAAG,cAAA,QACAC,EAAA,sJACC,YAEDN,EAAAC,EAAeE,uBCjBfN,EAA6BC,EAAQ,MAErCC,EAA8BD,EAAQ,OAKtCE,EAAAC,OAAe,EAEf,IAAAC,EAAAH,EAAoCD,EAAQ,QAI5CK,GAAA,EAFAN,EAA4CC,EAAQ,QAEpDM,SAAAF,EAAAG,cAAA,QACAC,EAAA,uDACC,WAEDN,EAAAC,EAAeE,0eCaR,MAAMI,EAAmB,EAC9BC,OACAC,UACAC,YACAC,UACAC,qBAEA,MAAMC,GAAcC,EAAAA,EAAAA,QAAOC,EAAAA,IAEpBC,EAAUC,IAAeC,EAAAA,EAAAA,UAAS,KAClCC,EAASC,IAAcF,EAAAA,EAAAA,UAAS,KAChCG,EAAQC,IAAaJ,EAAAA,EAAAA,WAAS,IAC9BK,EAAOC,IAAYN,EAAAA,EAAAA,UAAS,KAEnCO,EAAAA,EAAAA,WAAU,KACJjB,GAAQG,IACVM,EAAYN,EAAQe,KAAKV,UAAY,IACrCI,EAAWT,EAAQe,KAAKP,SAAW,IACnCK,EAAS,MAEV,CAAChB,EAAMG,IAEV,MAkCMgB,EAAc,KACbN,IACHG,EAAS,IACTf,MAIJ,OACE,EAAAmB,EAAAC,MAACC,EAAAA,EAAMA,CAACtB,KAAMA,EAAMC,QAASkB,EAAaI,SAAS,KAAKC,WAAS,aAC/D,EAAAJ,EAAAK,KAACC,EAAAA,EAAWA,UAAC,kBACb,EAAAN,EAAAC,MAACM,EAAAA,EAAaA,WACXZ,IACC,EAAAK,EAAAK,KAACG,EAAAA,EAAGA,CACFC,GAAI,EACJC,EAAG,EACHC,QAAQ,aACRC,MAAM,qBACNC,aAAc,YAEd,EAAAb,EAAAK,KAACS,EAAAA,EAAUA,CAACC,QAAQ,iBAASpB,OAIjC,EAAAK,EAAAC,MAACe,EAAAA,EAAWA,CAACZ,WAAS,EAACa,OAAO,oBAC5B,EAAAjB,EAAAK,KAACa,EAAAA,EAAUA,UAAC,UACZ,EAAAlB,EAAAK,KAACc,EAAAA,EAAMA,CACLC,MAAOhC,EACPiC,SAAWC,GAAMjC,EAAYiC,EAAEC,OAAOH,OACtCI,SAAU/B,WAETT,EAAeyC,IAAKC,IACnB,MAAMC,EAAYC,OAAOC,QAAQH,EAAKI,QAAU,CAAC,GAC9CL,IAAI,EAAEM,EAAKC,KAAS,GAAGA,SAAWD,KAClCE,KAAK,MACR,OACE,EAAAjC,EAAAC,MAACiC,EAAAA,EAAQA,CAAiBd,MAAOM,EAAKS,eACnCT,EAAKS,KAAK,IAAER,EAAY,IAAIA,KAAe,KAD/BD,EAAKS,cAQ5B,EAAAnC,EAAAK,KAAC+B,EAAAA,EAASA,CACRC,MAAM,WACNC,YAAY,wCACZC,WAAS,EACTC,KAAM,EACNpC,WAAS,EACTa,OAAO,SACPG,MAAO7B,EACP8B,SAAWC,GAAM9B,EAAW8B,EAAEC,OAAOH,OACrCI,SAAU/B,EACVgD,WAAW,+DAGf,EAAAzC,EAAAC,MAACyC,EAAAA,EAAaA,YACZ,EAAA1C,EAAAK,KAACsC,EAAAA,EAAMA,CAACC,QAAS7C,EAAayB,SAAU/B,WAAQ,YAGhD,EAAAO,EAAAK,KAACsC,EAAAA,EAAMA,CACLC,QA/FWC,UACjB,GAAKzD,EAAL,CAKAQ,EAAS,IACTF,GAAU,GAEV,IACE,MAAMoD,EAAQ,CACZhD,KAAM,CACJV,WACAG,QAASA,EAAQwD,eAIf9D,EAAY+D,cAChBjE,EAAQkE,SAASC,KACjBnE,EAAQkE,SAASE,UAEjBL,GAGFhE,IACAD,GACF,CAAE,MAAOuE,GACPC,QAAQ1D,MAAM,kCAAmCyD,GACjDxD,EAASwD,aAAeE,MAAQF,EAAIG,QAAU,yBAChD,SACE7D,GAAU,EACZ,CA3BA,MAFEE,EAAS,yBA8FLgB,MAAM,UACNG,QAAQ,YACRS,UAAWpC,GAAYK,EACvB+D,UACE/D,GAAS,EAAAO,EAAAK,KAACoD,EAAAA,EAAgBA,CAACC,KAAM,GAAI9C,MAAM,iBAAe+C,WAG3DlE,EAAS,YAAc,uCChHlC,SAASmE,EACPC,EACAC,EACAC,GAEA,MACMC,EAAkBD,EAAS,GAAGA,KAAY,GAEhD,MAAO,CACLE,KAAM,eAAeJ,8BAJLE,EAAS,GAAGA,KAAUD,IAAWA,KAOjDI,OAAQ,2DAEMJ,0BACED,mFAKIG,qJAOpBG,OAAQ,iCAECL,mBACCD,4CAGUG,gGAMpBI,GAAI,qGASSN,wBACED,iIAIoBG,yOAavC,gBCpDO,MAAMK,EAAsB,EACjClB,UAAWmB,UAkCTC,EAGAA,EA6YaC,EA6c2DC,EAAAA,EA73B1E,MAAMF,OAAEA,IAAWG,EAAAA,EAAAA,MACbC,GAAazF,EAAAA,EAAAA,QAAO0F,EAAAA,GACpB3F,GAAcC,EAAAA,EAAAA,QAAOC,EAAAA,GACrB0F,GAAc3F,EAAAA,EAAAA,QAAO4F,EAAAA,gBACrBC,GAAW7F,EAAAA,EAAAA,QAAO8F,EAAAA,cACjBC,EAAaC,IAAkB5F,EAAAA,EAAAA,UAAsB,IAAI6F,MACzDC,EAASC,IAAc/F,EAAAA,EAAAA,UAAS,IAChCgG,EAAQC,IAAajG,EAAAA,EAAAA,UAAiB,KACtCkG,GAAWC,KAAgBnG,EAAAA,EAAAA,UAAiB,KAC5CoG,GAAmBC,KAAwBrG,EAAAA,EAAAA,WAAS,IACpDsG,GAAgBC,KAAqBvG,EAAAA,EAAAA,WAAS,IAC9CwG,GAAeC,KAAoBzG,EAAAA,EAAAA,UAAwB,OAC3D0G,GAAYC,KAAiB3G,EAAAA,EAAAA,UAG1B,OACH4G,GAAaC,KAAkB7G,EAAAA,EAAAA,UAAwB,OACvD8G,GAAUC,KAAe/G,EAAAA,EAAAA,UAAwB,OACjDgH,GAAuBC,KAA4BjH,EAAAA,EAAAA,UAExD,IAAI6F,MACCV,GAAmB+B,KAAwBlH,EAAAA,EAAAA,UAG/C,CAAEV,MAAM,EAAOG,QAAS,QACpB0H,GAAcC,KAAmBpH,EAAAA,EAAAA,UACtC,IAAIqH,MAECC,GAAeC,KAAoBvH,EAAAA,EAAAA,UAAsB,IAAI6F,KAG9D2B,IACuB,QAA3BvC,EAAAA,EAAOtB,SAAS8D,mBAAhBxC,IAAAA,OAAAA,EAAAA,EAA8B,4BAC9BA,EAAOtB,SAASC,KACZC,IACuB,QAA3BoB,EAAAA,EAAOtB,SAAS8D,mBAAhBxC,IAAAA,OAAAA,EAAAA,EAA8B,2BAC9BD,GACA,WAEF0C,EAAAA,EAAAA,GAASnE,UACP,MAAMoE,QAAiBpC,EAAYqC,uBAC7BC,QAAgBtC,EAAYuC,iBAClC7B,EAAU0B,EAASI,eAGnB,IAAIC,EAAQH,EAAQG,OAAS,GAE7B,IAAKA,GAASL,EAASI,cAAe,KAE9BE,EAAAA,EADL,MAAMA,QAAmB5C,EAAW6C,eAAeP,EAASI,gBACvDE,SAAgB,QAAhBA,EAAAA,EAAYzH,YAAZyH,IAAAA,GAAyB,QAAzBA,EAAAA,EAAkBJ,eAAlBI,IAAAA,OAAAA,EAAAA,EAA2BD,SAC7BA,EAAQC,EAAWzH,KAAKqH,QAAQG,MAEtC,CAEA7B,GAAa6B,IACZ,CAACzC,IAEJ,MACEzD,MAAOqG,GACPC,QAASC,GACThI,MAAOiI,KACLZ,EAAAA,EAAAA,GAASnE,gBAEQ5D,EAAY4I,wBAAwBf,GAAgB3D,KAC3D2E,OAAS,GACpB,CAAChB,GAAgB3D,GAAWiC,EAASnG,KAGtCmC,MAAOoD,GACPkD,QAASK,GACTpI,MAAOqI,KACLhB,EAAAA,EAAAA,GAASnE,cAGKoF,EAMhB,OAN0B,QAAVA,SAFGhJ,EAAYiJ,kBAEVJ,aAALG,IAAAA,OAAAA,EAAAA,EAAYE,KACzBzH,GACCA,EAAEuC,SAASE,YAAcA,IACzBzC,EAAEuC,SAASC,OAAS4D,KAIvB,CAAC3D,GAAW2D,GAAgB7H,IAGzBmJ,GAAc5D,GAChB,cAAcA,GAAWvB,SAASE,aAAaqB,GAAWvB,SAASC,YACnES,GAGF0E,QAASC,GACTZ,QAASa,GACT5I,MAAO6I,KACLC,EAAAA,EAAAA,GAAsBC,EAAAA,GAAgCN,KAGxDC,QAASM,GACTjB,QAASkB,GACTjJ,MAAOkJ,KACLJ,EAAAA,EAAAA,GAAsBK,EAAAA,KAGxBT,QAASU,GACTrB,QAASsB,GACTrJ,MAAOsJ,KACLR,EAAAA,EAAAA,GAAsBS,EAAAA,KAGxBb,QAASc,GACTzB,QAAS0B,GACTzJ,MAAO0J,KACLZ,EAAAA,EAAAA,GAAsBa,EAAAA,IAyFpBC,GAAkB,KACtBtD,GAAc,MACdE,GAAe,OAGXqD,GAAiB,KAChBtD,KArBLH,GAsBkBG,IArBlBL,IAAkB,GAsBlB0D,OAGIE,GAAwB,KAC5B,IAAKvD,GAAa,OAClB,MAAMnH,EAAUmH,GAChBqD,KACA/C,GAAqB,CAAE5H,MAAM,EAAMG,aAgB/B2K,GAAoBC,IACxBzE,EAAgB0E,IACd,MAAMC,EAAS,IAAI1E,IAAIyE,GAMvB,OALIC,EAAOC,IAAIH,GACbE,EAAOE,OAAOJ,GAEdE,EAAOG,IAAIL,GAENE,KAILI,IAAoBC,EAAAA,EAAAA,SACxB,IAAM,CACJ,CACEC,OAASlC,QAGFlJ,EADL,MAAMA,EAAUkJ,EAAKmC,QACrB,KAAKrL,SAAiB,QAAjBA,EAAAA,EAASkE,gBAATlE,IAAAA,OAAAA,EAAAA,EAAmBmE,MACtB,OAAO,EAAAlD,EAAAK,KAACG,EAAAA,EAAGA,CAAAA,GAIb,MAAMuB,EAAM,GAAGhD,EAAQkE,SAASE,aAAapE,EAAQkE,SAASC,OACxDmH,EAAc5D,GAAa6D,IAAIvI,GACrC,OACE,EAAA/B,EAAAK,KAACkK,GAAAA,CACCxL,QAASA,EACTyL,QAAS1D,GACT2D,eAAgBJ,OAM1B,CAACvD,GAAgBL,KAIb8D,GAAqB,EACzBxL,UACAyL,QAASE,EACTD,yBAOiB1L,EAMGA,EAAAA,EAPpB,MAAO4L,EAAkBC,IAAuBtL,EAAAA,EAAAA,UAAS,GACnDuL,GAAyB,QAAd9L,EAAAA,EAAQ+L,cAAR/L,IAAAA,OAAAA,EAAAA,EAAgBgM,cAAe,GAAGL,qBAG7CM,EAAgBP,GAAkB,iBAIlCQ,EDnVH,SACLC,EACAL,EACA/G,GAEA,MAAMD,EAAU,WAAWgH,oBAE3B,OAAKK,EAIDA,EAAYC,oBAEPvH,EAAoCC,EAASC,EADrCoH,EAAaC,oBAAqBpH,QAAU,IAIzDmH,EAAYE,aAwFlB,SACEvH,EACAC,EACAuH,EACAtH,GAIA,MAAO,CACLE,KAAM,eAAeJ,eACjBwH,MAJctH,EAAS,GAAGA,IAASD,IAAWA,KAMlDI,OAAQ,2DAEMJ,0BACED,kEAKbwH,QAAiBtH,qJAOpBI,OAAQ,iCAECL,mBACCD,2BAGPwH,QAAiBtH,gGAMpBK,GAAI,qGASSN,wBACED,gHAIGwH,QAAiBtH,yOAavC,CAvJauH,CAA6BzH,EAASC,EAF5BoH,EAAaE,aAAclI,KAC7BgI,EAAaE,aAAcrH,QAAU,IAKpDmH,EAAYK,YAqJlB,SACE1H,EACAC,EACA0H,GAIA,MAAO,CACLvH,KAAM,gBAHgBJ,KAAW2H,KAAa1H,KAK9CI,OAAQ,2DAEMJ,0BACED,KAAW2H,wLAS3BrH,OAAQ,iCAECL,mBACCD,0BAGP2H,6FAMHpH,GAAI,qGASSN,wBACED,KAAW2H,8TAgB9B,CA/MWC,CAA4B5H,EAASC,EAD1BoH,EAAaK,YAAarI,MAI1CgI,EAAYQ,OA8MlB,SACE7H,EACAC,EACA6H,GAEA,MAAO,CACL1H,KAAM,eAAeJ,qBACX8H,KAAc7H,KAExBI,OAAQ,2DAEMJ,0BACED,4EAKH8H,sJAObxH,OAAQ,iCAECL,mBACCD,2BAGP8H,+FAMHvH,GAAI,qGASSN,wBACED,6IAKD8H,gQAelB,CA9QWC,CAAuB/H,EAASC,EADpBoH,EAAaQ,OAAQxI,MAInCU,EAAoCC,EAASC,EAAQ,UAzBnDF,EAAoCC,EAASC,EAAQ,SA0BhE,CCiTqB+H,CADiB,QAAd9M,EAAAA,EAAQ+L,cAAR/L,IAAAA,GAA0B,QAA1BA,EAAAA,EAAgB+M,kBAAhB/M,IAAAA,OAAAA,EAAAA,EAA4BmM,YACOL,EAAUG,GAEjE,OACE,EAAAhL,EAAAC,MAACO,EAAAA,EAAGA,CACFE,EAAG,EACHC,QAAQ,qBACRiC,QAAUtB,GAAMA,EAAEyK,4BAEjBhN,EAAQe,KAAKP,UACZ,EAAAS,EAAAC,MAACO,EAAAA,EAAGA,CAACC,GAAI,aACP,EAAAT,EAAAK,KAACS,EAAAA,EAAUA,CAACC,QAAQ,KAAKiL,cAAY,WAAC,cAGtC,EAAAhM,EAAAK,KAACG,EAAAA,EAAGA,CACFE,EAAG,EACHC,QAAQ,mBACRE,aAAc,EACdoL,OAAO,0CAEP,EAAAjM,EAAAK,KAACS,EAAAA,EAAUA,CACTC,QAAQ,QACRmL,MAAO,CACLC,WAAY,WACZC,UAAW,aACXC,aAAc,uBAGftN,EAAQe,KAAKP,gBAKtB,EAAAS,EAAAK,KAACS,EAAAA,EAAUA,CAACC,QAAQ,KAAKiL,cAAY,WAAC,oBAGtC,EAAAhM,EAAAC,MAACa,EAAAA,EAAUA,CAACC,QAAQ,QAAQuL,WAAS,YAAC,oDACc,IACjDvN,EAAQe,KAAKV,SAAS,iBAEzB,EAAAY,EAAAK,KAACG,EAAAA,EAAGA,CAACoC,QAAUtB,GAAMA,EAAEyK,4BACrB,EAAA/L,EAAAC,MAACsM,EAAAA,EAAIA,CACHnL,MAAOuJ,EACPtJ,SAAU,CAACC,EAAGkL,KACZlL,EAAEyK,kBACFnB,EAAoB4B,IAEtBC,eAAe,qBAEf,EAAAzM,EAAAK,KAACqM,EAAAA,EAAGA,CAACrK,MAAM,OAAOO,QAAUtB,GAAMA,EAAEyK,qBACpC,EAAA/L,EAAAK,KAACqM,EAAAA,EAAGA,CAACrK,MAAM,UAAUO,QAAUtB,GAAMA,EAAEyK,qBACvC,EAAA/L,EAAAK,KAACqM,EAAAA,EAAGA,CAACrK,MAAM,SAASO,QAAUtB,GAAMA,EAAEyK,qBACtC,EAAA/L,EAAAK,KAACqM,EAAAA,EAAGA,CAACrK,MAAM,KAAKO,QAAUtB,GAAMA,EAAEyK,0BAGtC,EAAA/L,EAAAC,MAACO,EAAAA,EAAGA,CAACmM,GAAI,YACe,IAArBhC,IACC,EAAA3K,EAAAK,KAACuM,EAAAA,EAAWA,CACVC,KAAM5B,EAAShH,KACf6I,SAAS,OACTC,oBAAkB,IAGA,IAArBpC,IACC,EAAA3K,EAAAK,KAACuM,EAAAA,EAAWA,CACVC,KAAM5B,EAAS/G,OACf4I,SAAS,aACTC,oBAAkB,IAGA,IAArBpC,IACC,EAAA3K,EAAAK,KAACuM,EAAAA,EAAWA,CACVC,KAAM5B,EAAS9G,OACf2I,SAAS,SACTC,oBAAkB,IAGA,IAArBpC,IACC,EAAA3K,EAAAK,KAACuM,EAAAA,EAAWA,CACVC,KAAM5B,EAAS7G,GACf0I,SAAS,KACTC,oBAAkB,WAexBpN,GAAQiI,IAAiBI,GACzBgF,GACJxE,IACAK,IACAI,IACAI,GAEF,GAbE1B,IACAI,IACAQ,IACAK,IACAI,IACAI,GASA,OACE,EAAApJ,EAAAK,KAACG,EAAAA,EAAGA,CAACE,EAAG,WACL,IAAIuM,MAAM,IAAIxL,IAAI,CAACyL,EAAGC,KACrB,EAAAnN,EAAAK,KAACG,EAAAA,EAAGA,CAASE,EAAG,YACd,EAAAV,EAAAK,KAAC+M,EAAAA,EAAQA,CAACrM,QAAQ,OAAOsM,MAAM,UADvBF,MAQlB,GAAIxN,GACF,OAAO,EAAAK,EAAAK,KAACiN,EAAAA,EAAkBA,CAAC3N,MAAOA,KAGpC,GAAIqN,GAAiB,CACnB,MAAMO,EAAmB/E,GACrB,yBACAK,GACE,6BACAI,GACE,6BACAI,GACE,6BACA,UACV,OACE,EAAArJ,EAAAC,MAACO,EAAAA,EAAGA,CAACE,EAAG,aACN,EAAAV,EAAAC,MAACa,EAAAA,EAAUA,CAACF,MAAM,kBAAQ,gCACMoM,GAAgBzJ,YAEhD,EAAAvD,EAAAC,MAACa,EAAAA,EAAUA,CAACC,QAAQ,QAAQH,MAAM,0BAAgB,eACnC2M,MAEf,EAAAvN,EAAAK,KAACS,EAAAA,EAAUA,CAACC,QAAQ,QAAQH,MAAM,yBAAgB,qDAKxD,CAEA,MAAM4M,IAAe/F,IAAY,IAAiBgG,OAC/CC,IAAOpH,GAAsBwD,IAAI4D,EAAEzK,SAASC,OAEzCyK,IAASnJ,UAAkB,QAAlBA,EAAAA,GAAYsG,cAAZtG,IAAAA,OAAAA,EAAAA,EAAoBoJ,kBAAmB,GAEhDC,GAAkBL,GAAWC,OAChCC,QAAqBA,QAA0B,aAAzCI,EAAAA,EAAAA,GAAuB,QAARJ,EAAAA,EAAE5C,cAAF4C,IAAAA,OAAAA,EAAAA,EAAUK,cAE5BC,GAAmBR,GAAWC,OACjCC,QAAqBA,QAA0B,cAAzCI,EAAAA,EAAAA,GAAuB,QAARJ,EAAAA,EAAE5C,cAAF4C,IAAAA,OAAAA,EAAAA,EAAUK,cAE5BE,GAAmBT,GAAWC,OACjCC,QAAqBA,QAA0B,YAAzCI,EAAAA,EAAAA,GAAuB,QAARJ,EAAAA,EAAE5C,cAAF4C,IAAAA,OAAAA,EAAAA,EAAUK,cAG5BG,GAAyC,CAC7C,CACEC,MAAO,OACPC,MAAO,gBACPjE,OAASkE,IACP,EAAArO,EAAAK,KAACiO,EAAAA,EAAIA,CAACjM,MAAOgM,EAAIvO,KAAKV,SAAUwB,MAAM,UAAU8C,KAAK,WAGzD,CACEyK,MAAO,WACPC,MAAO,oBACPjE,OAASkE,QACcA,EAAAA,EAAAA,EAArB,MAAME,EAAyB,QAAVF,EAAAA,EAAIvD,cAAJuD,IAAAA,GAAsB,QAAtBA,EAAAA,EAAYN,kBAAZM,IAAAA,GACwB,QADxBA,EAAAA,EAAwBlG,KAC3CqG,GAAgB,aAAXA,EAAEC,MAAoC,SAAbD,EAAE1D,eADbuD,IAAAA,OAAAA,EAAAA,EAElBK,mBACH,OACE,EAAA1O,EAAAK,KAACS,EAAAA,EAAUA,CAACC,QAAQ,iBACjBwN,EAAe,IAAII,KAAKJ,GAAcK,qBAAuB,QAKtE,CACET,MAAO,UACPC,MAAO,mBACPS,YAAY,EACZC,WAAW,EACX3E,OAASkE,QAKsBA,EAAAA,EAJ7B,MAAMtM,EAAM,GAAGsM,EAAIpL,SAASE,aAAakL,EAAIpL,SAASC,OAChD6L,EAAY9J,EAAY6E,IAAIuE,EAAIpL,SAASC,MACzC8L,EAAYpI,GAAckD,IAAI/H,GAC9BkN,EAAcxI,GAAa6D,IAAIvI,GAGrC,OAFqBmN,QAAgB,QAARb,EAAAA,EAAIvO,YAAJuO,IAAAA,GAAmB,QAAnBA,EAAAA,EAAUc,iBAAVd,IAAAA,OAAAA,EAAAA,EAAqBnL,OA+BhD,EAAAlD,EAAAC,MAACO,EAAAA,EAAGA,CAAC4O,QAAQ,OAAOC,WAAW,oBAC7B,EAAArP,EAAAK,KAACS,EAAAA,EAAUA,CACTC,QAAQ,QACRmL,MAAO,CACLoD,WAAY,YACZC,YAAa,YAGdP,EACG,aACAD,GAAaE,EACXA,EACA,qBAEPF,GAAaE,IACZ,EAAAjP,EAAAK,KAACmP,EAAAA,GAAOA,CAACrB,MAAM,8BACb,EAAAnO,EAAAK,KAACoP,EAAAA,EAAUA,CAAC/L,KAAK,QAAQd,QA5BdC,UACboM,UACIS,UAAUC,UAAUC,UAAUX,GACpClK,EAAS8K,KAAK,CACZtM,QAAS,8BACTuM,SAAU,UACVV,QAAS,0BAuBL,EAAApP,EAAAK,KAAC0P,EAAAA,EAAYA,CAACC,SAAS,eAI7B,EAAAhQ,EAAAK,KAACmP,EAAAA,GAAOA,CACNrB,MAAOY,EAAY,eAAiB,2BAEpC,EAAA/O,EAAAK,KAAC4P,OAAAA,WACC,EAAAjQ,EAAAK,KAACoP,EAAAA,EAAUA,CACT/L,KAAK,QACLd,QAhDgB,KACpBmM,GAzTa,EAACmB,EAA0BC,KAClD,MAAMpO,EAAM,GAAGmO,KAAoBC,IACnCzJ,GAAiBkD,IACf,MAAMwG,EAAO,IAAIzJ,IAAIiD,GAErB,OADAwG,EAAKrG,OAAOhI,GACLqO,KAqTDC,CAAiBhC,EAAIpL,SAASE,UAAWkL,EAAIpL,SAASC,MACtDwG,GAAiB2E,EAAIpL,SAASC,OA1VVL,OAC5BqN,EACAC,KAEA,MAAMpO,EAAM,GAAGmO,KAAoBC,IACnC,IAAIvJ,GAAckD,IAAI/H,GAAtB,CAIA8E,GAAkB+C,GAAS,IAAIzE,IAAIyE,GAAMI,IAAIjI,IAC7C,IACE,MAAMkG,QAAahJ,EAAYqR,gBAAgBJ,EAAkBC,GACjEzJ,GAAiBkD,GAAS,IAAIjD,IAAIiD,GAAM2G,IAAIxO,EAAKkG,EAAKnE,SACtD4F,GAAiByG,EACnB,CAAE,MAAO/M,GACP,MAAMoN,EACJpN,aAAeE,MAAQF,EAAIG,QAAU,yBACvCwB,EAAS8K,KAAK,CACZtM,QAAS,4BAA4BiN,IACrCV,SAAU,QACVV,QAAS,aAEb,SACEvI,GAAkB+C,IAChB,MAAMwG,EAAO,IAAIjL,IAAIyE,GAErB,OADAwG,EAAKrG,OAAOhI,GACLqO,GAEX,CArBA,GAqVQK,CAAsBpC,EAAIpL,SAASE,UAAWkL,EAAIpL,SAASC,OA4CrD1B,SAAUwN,WAETD,GAAY,EAAA/O,EAAAK,KAACqQ,EAAAA,EAAiBA,CAAAA,IAAM,EAAA1Q,EAAAK,KAACsQ,EAAAA,EAAcA,CAAAA,aAzD1D,EAAA3Q,EAAAK,KAACS,EAAAA,EAAUA,CAACC,QAAQ,QAAQH,MAAM,yBAAgB,yBAiE1D,CACEuN,MAAO,GACPC,MAAO,UACPS,YAAY,EACZC,WAAW,EACX3E,OAASkE,IAEP,GADmBjI,KAAaiI,EAAIpL,SAASC,KAE3C,OAAO,EAAAlD,EAAAK,KAACoD,EAAAA,EAAgBA,CAACC,KAAM,KAEjC,MAAMkN,EAAUvC,EAAIvO,KAAK+Q,YAAYvL,OAOrC,OANkBwL,EAAAA,EAAAA,GAChBF,EACAtL,EACAqD,GACAI,KAIA,EAAA/I,EAAAK,KAACoP,EAAAA,EAAUA,CACT/L,KAAK,QACLd,QAAUtB,IACRA,EAAEyK,kBACF,MAAMgF,EAAOzP,EAAE0P,cAAcC,wBAC7BhL,GAAc,CAAEiL,IAAKH,EAAKI,OAAQC,KAAML,EAAKK,OAC7CjL,GAAekI,IAEjBF,MAAM,UACNkD,gBAAerL,GAAa,oBAAiBrC,EAC7C2N,gBAAc,iBAEd,EAAAtR,EAAAK,KAACkR,EAAAA,EAAYA,CAAAA,KAdM,QAqBvBC,GAAwC,CAC5C,CACErD,MAAO,SACPC,MAAO,oBACPjE,OAASkE,QACsBA,EAA7B,MAAMoD,GAAQ3D,EAAAA,EAAAA,IAAyB,QAAVO,EAAAA,EAAIvD,cAAJuD,IAAAA,OAAAA,EAAAA,EAAYN,aAAc,IACjD2D,EAAsB,YAAVD,EAClB,OACE,EAAAzR,EAAAK,KAACiO,EAAAA,EAAIA,CACHjM,MAAOoP,EACP/N,KAAK,QACLiO,KAAMD,GAAY,EAAA1R,EAAAK,KAACuR,EAAAA,EAAkBA,CAAAA,IAAM,EAAA5R,EAAAK,KAACwR,EAAAA,EAAUA,CAAAA,GACtDjR,MAAO8Q,EAAY,UAAY,gBAKvC,CACEvD,MAAO,OACPC,MAAO,gBACPjE,OAASkE,IACP,EAAArO,EAAAK,KAACiO,EAAAA,EAAIA,CAACjM,MAAOgM,EAAIvO,KAAKV,SAAUwB,MAAM,UAAU8C,KAAK,WAGzD,CACEyK,MAAO,WACPC,MAAO,eACPjE,OAASkE,GACFA,EAAIvO,KAAKP,SAIZ,EAAAS,EAAAK,KAACmP,EAAAA,GAAOA,CAACrB,MAAOE,EAAIvO,KAAKP,QAASuS,UAAU,gBAC1C,EAAA9R,EAAAK,KAACS,EAAAA,EAAUA,CACTC,QAAQ,QACRmL,MAAO,CACL/L,SAAU,QACV4R,SAAU,SACVC,aAAc,WACd7F,WAAY,mBAGbkC,EAAIvO,KAAKP,aAbP,EAAAS,EAAAK,KAACS,EAAAA,EAAUA,CAACC,QAAQ,iBAAQ,OAmBzC,CACEoN,MAAO,YACPC,MAAO,6BACPjE,OAASkE,IACP,EAAArO,EAAAK,KAACS,EAAAA,EAAUA,CAACC,QAAQ,iBACjBsN,EAAIpL,SAASgP,kBACV,IAAItD,KAAKN,EAAIpL,SAASgP,mBAAmBrD,qBACzC,OAIV,CACET,MAAO,WACPC,MAAO,oBACPjE,OAASkE,QACcA,EAAAA,EAAAA,EAArB,MAAM6D,EAAyB,QAAV7D,EAAAA,EAAIvD,cAAJuD,IAAAA,GAAsB,QAAtBA,EAAAA,EAAYN,kBAAZM,IAAAA,GACiD,QADjDA,EAAAA,EAAwBlG,KAC3CqG,IAAiB,aAAXA,EAAEC,MAAkC,WAAXD,EAAEC,OAAmC,SAAbD,EAAE1D,eADtCuD,IAAAA,OAAAA,EAAAA,EAElBK,mBACH,OACE,EAAA1O,EAAAK,KAACS,EAAAA,EAAUA,CAACC,QAAQ,iBACjBmR,EAAe,IAAIvD,KAAKuD,GAActD,qBAAuB,QAKtE,CACET,MAAO,GACPC,MAAO,UACPS,YAAY,EACZC,WAAW,EACX3E,OAASkE,QAK0BA,EAHjC,GADmBjI,KAAaiI,EAAIpL,SAASC,KAE3C,OAAO,EAAAlD,EAAAK,KAACoD,EAAAA,EAAgBA,CAACC,KAAM,KAEjC,MAAMgO,EAA6D,aAAjD5D,EAAAA,EAAAA,IAAyB,QAAVO,EAAAA,EAAIvD,cAAJuD,IAAAA,OAAAA,EAAAA,EAAYN,aAAc,IACrD6C,EAAUvC,EAAIvO,KAAK+Q,YAAYvL,OAC/B6M,GAAYrB,EAAAA,EAAAA,GAChBF,EACAtL,EACAqD,GACAI,IAGF,OAAK2I,IADWvI,IAAoByH,IAAYtL,GAChB6M,IAE9B,EAAAnS,EAAAK,KAACoP,EAAAA,EAAUA,CACT/L,KAAK,QACLd,QAAUtB,IACRA,EAAEyK,kBACF,MAAMgF,EAAOzP,EAAE0P,cAAcC,wBAC7BhL,GAAc,CAAEiL,IAAKH,EAAKI,OAAQC,KAAML,EAAKK,OAC7CjL,GAAekI,IAEjBF,MAAM,UACNkD,gBAAerL,GAAa,oBAAiBrC,EAC7C2N,gBAAc,iBAEd,EAAAtR,EAAAK,KAACkR,EAAAA,EAAYA,CAAAA,KAdkC,QAsBnDa,GAAwBZ,GAAe/D,OAC1C4E,GAAsB,aAAdA,EAAIlE,OAAsC,WAAdkE,EAAIlE,OAG3C,OACE,EAAAnO,EAAAC,MAACO,EAAAA,EAAGA,CAACE,EAAG,aACN,EAAAV,EAAAC,MAACqS,EAAAA,EAAIA,CAACC,WAAS,EAACC,QAAS,EAAGC,UAAU,mBACnCnK,KACC,EAAAtI,EAAAK,KAACiS,EAAAA,EAAIA,CAACI,MAAI,YACR,EAAA1S,EAAAC,MAACO,EAAAA,EAAGA,CACF4O,QAAQ,OACRuD,cAAc,SACdtD,WAAW,WACX5O,GAAI,aAEJ,EAAAT,EAAAK,KAACsC,EAAAA,EAAMA,CACL5B,QAAQ,YACRH,MAAM,UACN4C,WAAW,EAAAxD,EAAAK,KAACuS,EAAAA,EAAOA,CAAAA,GACnBhQ,QAAS,IAAM+C,IAAqB,GACpCnE,SAA2B,IAAjBmM,GAAMkF,SAAiBrN,GACjCsN,cAAY,4BACZC,mBAAkBpF,GAAMkF,gBACzB,wBAGCrN,KACA,EAAAxF,EAAAK,KAACS,EAAAA,EAAUA,CACTC,QAAQ,UACRH,MAAM,gBACNsL,MAAO,CAAE8G,UAAW,GACpBF,cAAY,4BACZ,gCAIc,IAAjBnF,GAAMkF,SACL,EAAA7S,EAAAK,KAACS,EAAAA,EAAUA,CACTC,QAAQ,UACRH,MAAM,gBACNsL,MAAO,CAAE8G,UAAW,GACpBF,cAAY,4BAEVtO,GAEE,UAEEA,EAAAA,EAIAA,EAAAA,EALF,MAAMyO,EACa,QAAjBzO,EAAAA,GAAWsG,cAAXtG,IAAAA,GAA6B,QAA7BA,EAAAA,EAAmBuJ,kBAAnBvJ,IAAAA,OAAAA,EAAAA,EAA+B2D,KAC5BqG,GAAsB,UAAXA,EAAEC,MAEZyE,EACa,QAAjB1O,EAAAA,GAAWsG,cAAXtG,IAAAA,GAA6B,QAA7BA,EAAAA,EAAmBuJ,kBAAnBvJ,IAAAA,OAAAA,EAAAA,EAA+B2D,KAC5BqG,GAAsB,yBAAXA,EAAEC,MAGlB,MAA+B,UAA3BwE,aAAAA,EAAAA,EAAgBnI,QACX,yBAAwBmI,aAAAA,EAAAA,EAAgB1P,UAAW,YAE9B,UAA1B2P,aAAAA,EAAAA,EAAepI,QACV,yBAAwBoI,aAAAA,EAAAA,EAAe3P,UAAW,wBAEpD,oBACT,EAjBE,GADA,+BAwBc,IAA3BsK,GAAgBgF,QACa,IAA5B5E,GAAiB4E,QACW,IAA5B7E,GAAiB6E,SACf,EAAA7S,EAAAK,KAACiS,EAAAA,EAAIA,CAACI,MAAI,YACR,EAAA1S,EAAAK,KAACG,EAAAA,EAAGA,CAACE,EAAG,EAAGyS,UAAU,mBACnB,EAAAnT,EAAAK,KAACS,EAAAA,EAAUA,CAACC,QAAQ,QAAQH,MAAM,yBAAgB,wDAMzDiN,GAAgBgF,OAAS,IACxB,EAAA7S,EAAAK,KAACiS,EAAAA,EAAIA,CAACI,MAAI,YACR,EAAA1S,EAAAK,KAAC+S,EAAAA,EAAKA,CACJjF,MAAM,mBACNkF,QAAS,CACPC,OAAQzF,GAAgBgF,OAAS,EACjCU,SAAU,GACVC,QAAQ,EACR1E,WAAW,EACX2E,iBAAkB,IAClBC,SAAS,EACTC,qBAAqB,GAEvBC,QAASxB,GACTnK,KAAM4F,OAIXI,GAAiB4E,OAAS,IACzB,EAAA7S,EAAAK,KAACiS,EAAAA,EAAIA,CAACI,MAAI,YACR,EAAA1S,EAAAK,KAAC+S,EAAAA,EAAKA,CACJjF,MAAM,kBACNkF,QAAS,CACPC,OAAQrF,GAAiB4E,OAAS,EAClCU,SAAU,GACVC,QAAQ,EACR1E,WAAW,EACX2E,iBAAkB,IAClBC,SAAS,EACTC,qBAAqB,GAEvBC,QAASpC,GACTvJ,KAAMgG,OAIXD,GAAiB6E,OAAS,IACzB,EAAA7S,EAAAK,KAACiS,EAAAA,EAAIA,CAACI,MAAI,YACR,EAAA1S,EAAAK,KAAC+S,EAAAA,EAAKA,CAEJjF,MAAM,WACNkF,QAAS,CACPC,OAAQtF,GAAiB6E,OAAS,EAClCU,SAAU,GACVC,QAAQ,EACR1E,WAAW,EACX2E,iBAAkB,IAClBC,SAAS,EACTC,qBAAqB,GAEvBC,QAAS1F,GACTjG,KAAM+F,GACN6F,YAAa5J,IAbT,wBAmBZ,EAAAjK,EAAAK,KAACyT,EAAAA,EAAmBA,CAClBlV,KAAM8G,GACN7G,QAAS,IAAM8G,IAAqB,GACpC7G,UAAW,KACT6G,IAAqB,GACrBN,EAAYqI,GAAMA,EAAI,IAExB5G,eAAgBA,GAChB3D,UAAWA,GACXqC,UAAWA,GACXmI,MAAOA,MAGT,EAAA3N,EAAAK,KAAC0T,EAAAA,EAAIA,CACHC,GAAG,eACHpV,KAAMsQ,QAAQlJ,IACdnH,QAAS0K,GACT0K,gBAAgB,iBAChBC,eAAgBlO,IAAc,CAAEkL,IAAK,EAAGE,KAAM,YAE7ClL,IACC,UACmCA,EAAjC,MAAMwL,EAAqE,aAAzD5D,EAAAA,EAAAA,IAAiC,QAAlB5H,EAAAA,GAAY4E,cAAZ5E,IAAAA,OAAAA,EAAAA,EAAoB6H,aAAc,IAC7D6C,EAAU1K,GAAYpG,KAAK+Q,YAAYvL,OAGvCwC,EAAQ,GAad,OAfgBqB,IAAoByH,IAAYtL,GAAUoM,GAIxD5J,EAAMqM,MACJ,EAAAnU,EAAAK,KAAC6B,EAAAA,EAAQA,CAAYU,QAAS4G,YAAgB,QAAhC,SAKlB1B,EAAMqM,MACJ,EAAAnU,EAAAK,KAAC6B,EAAAA,EAAQA,CAAcU,QAAS6G,YAAuB,UAAzC,WAIT3B,CACT,EAnBA,KAsBHhC,KACC,EAAA9F,EAAAK,KAAC1B,EAAgBA,CACfC,KAAMgH,GACN/G,QAAS,KACPgH,IAAkB,GAClBE,GAAiB,OAEnBjH,UAxrBkB,KACxBuG,EAAYqI,GAAMA,EAAI,GACtB7H,IAAkB,GAClBd,EAAS8K,KAAK,CACZtM,QAAS,kBACTuM,SAAU,UACVV,QAAS,cAEXrJ,GAAiB,OAirBXhH,QAAS+G,GACT9G,eAAgB2O,MAIpB,EAAA3N,EAAAK,KAAC+T,EAAAA,EAAmBA,CAClBxV,KAAM6F,GAAkB7F,KACxBuP,MAAM,iBACNkG,YAAa,wCAAgH,cAAxEvG,EAAAA,EAAAA,IAAwC,QAAzBrJ,EAAAA,GAAkB1F,eAAlB0F,IAAAA,GAAiC,QAAjCA,EAAAA,EAA2BqG,cAA3BrG,IAAAA,OAAAA,EAAAA,EAAmCsJ,aAAc,IAAqB,UAAY,aACtJ3H,SAAuB,OAAbA,GACVkO,UAtqBsBzR,UACrB4B,GAAkB1F,eA1GG8D,OAAO0R,EAAyBC,KAE1DjO,GAA0BqD,GAAS,IAAIzE,IAAIyE,GAAMI,IAAIwK,IACrDnO,GAAYmO,GACZ,UACQvV,EAAYwV,cAAcF,EAAiBC,GACjDzP,EAAS8K,KAAK,CACZtM,QAAS,+BACTuM,SAAU,UACVV,QAAS,cAEX/J,EAAYqI,GAAMA,EAAI,EACxB,CAAE,MAAOtK,GACP,MAAMoN,EACJpN,aAAeE,MAAQF,EAAIG,QAAU,yBAEvCgD,GAA0BqD,IACxB,MAAMwG,EAAO,IAAIjL,IAAIyE,GAErB,OADAwG,EAAKrG,OAAOyK,GACLpE,IAETrL,EAAS8K,KAAK,CACZtM,QAAS,6BAA6BiN,IACtCV,SAAU,QACVV,QAAS,aAEb,SACE/I,GAAY,KACd,GA+EMqO,CACJjQ,GAAkB1F,QAAQkE,SAASE,UACnCsB,GAAkB1F,QAAQkE,SAASC,MAErCsD,GAAqB,CAAE5H,MAAM,EAAOG,QAAS,SAiqBzC4V,SA9pBqB,KACzBnO,GAAqB,CAAE5H,MAAM,EAAOG,QAAS,mMCrQ1C,MAAMqV,EAAsB,EACjCxV,OACAuP,QACAkG,cACAO,cACA9E,WAAW,SACX1J,YAAW,EACXkO,YACAK,eAEA,MAAOE,EAAYC,IAAiBxV,EAAAA,EAAAA,UAAS,KAG7CO,EAAAA,EAAAA,WAAU,KACHjB,GACHkW,EAAc,KAEf,CAAClW,IAEJ,MAAMmW,EAAwC,SAAbjF,GAAuB8E,EAClDI,GAAaD,GAA2BF,IAAeD,EAQ7D,OACE,EAAAK,EAAAhV,MAACC,EAAAA,EAAMA,CACLtB,KAAMA,EACNC,QAASuH,OAAWzC,EAAYgR,EAChCxU,SAAS,KACTC,WAAS,aAET,EAAA6U,EAAAhV,MAACK,EAAAA,EAAWA,WACI,SAAbwP,IACC,EAAAmF,EAAAhV,MAACO,EAAAA,EAAGA,CAAC4O,QAAQ,OAAOC,WAAW,SAASnD,MAAO,CAAEgJ,IAAK,cACpD,EAAAD,EAAA5U,KAAC8U,EAAAA,EAAWA,CAACvU,MAAM,WACnB,EAAAqU,EAAA5U,KAAC4P,OAAAA,UAAM9B,OAGG,SAAb2B,GAAuB3B,MAE1B,EAAA8G,EAAAhV,MAACM,EAAAA,EAAaA,YACZ,EAAA0U,EAAA5U,KAAC+U,EAAAA,EAAiBA,CAAClJ,MAAO,CAAEC,WAAY,qBACrCkI,IAEFU,IACC,EAAAE,EAAAhV,MAACO,EAAAA,EAAGA,CAACmM,GAAI,aACP,EAAAsI,EAAAhV,MAACa,EAAAA,EAAUA,CAACC,QAAQ,QAAQH,MAAM,gBAAgBoL,cAAY,YAAC,SACxD,EAAAiJ,EAAA5U,KAACgV,SAAAA,UAAQT,IAAqB,mBAErC,EAAAK,EAAA5U,KAAC+B,EAAAA,EAASA,CACRhC,WAAS,EACTW,QAAQ,WACR2C,KAAK,QACLtC,MAAOyT,EACPxT,SAAUC,GAAKwT,EAAcxT,EAAEC,OAAOH,OACtCI,SAAU4E,EACVkP,WAAS,EACThT,YAAasS,WAKrB,EAAAK,EAAAhV,MAACyC,EAAAA,EAAaA,YACZ,EAAAuS,EAAA5U,KAACsC,EAAAA,EAAMA,CAACC,QAAS+R,EAAUnT,SAAU4E,WAAU,YAG/C,EAAA6O,EAAA5U,KAACsC,EAAAA,EAAMA,CACLC,QAjDc,KAChBoS,GACFV,KAgDI1T,MAAM,YACNG,QAAQ,YACRS,SAAU4E,IAAa4O,EACvBxR,UAAW4C,GAAW,EAAA6O,EAAA5U,KAACoD,EAAAA,EAAgBA,CAACC,KAAM,GAAI9C,MAAM,iBAAe+C,WAEtEyC,EAAW,cAAgB,8PCvE/B,MAAM0N,EAAsB,EACjClV,OACAC,UACAC,YACAgI,iBACA3D,YACAqC,YACAmI,YAEA,MAAM1O,GAAcC,EAAAA,EAAAA,QAAOC,EAAAA,GACrB4F,GAAW7F,EAAAA,EAAAA,QAAO8F,EAAAA,cAEjBuQ,EAAcC,IAAmBlW,EAAAA,EAAAA,UAAS,KAC1CC,EAASC,IAAcF,EAAAA,EAAAA,UAAS,KAChCmW,EAAUC,IAAepW,EAAAA,EAAAA,WAAS,IAClCqW,EAAaC,IAAkBtW,EAAAA,EAAAA,UAAwB,MAExDS,EAAc,KAClByV,EAAgB,IAChBhW,EAAW,IACXoW,EAAe,MACf/W,KAgEF,OACE,EAAAoW,EAAAhV,MAACC,EAAAA,EAAMA,CAACtB,KAAMA,EAAMC,QAASkB,EAAaI,SAAS,KAAKC,WAAS,aAC/D,EAAA6U,EAAA5U,KAACC,EAAAA,EAAWA,UAAC,wBACb,EAAA2U,EAAAhV,MAACM,EAAAA,EAAaA,YACZ,EAAA0U,EAAAhV,MAACO,EAAAA,EAAGA,CACFC,GAAI,EACJC,EAAG,IACHC,QAAQ,aACRE,aAAc,EACduO,QAAQ,OACRC,WAAW,aACXnD,MAAO,CAAEgJ,IAAK,cAEd,EAAAD,EAAA5U,KAACwV,EAAAA,EAAQA,CACPjV,MAAM,UACNoP,SAAS,QACT9D,MAAO,CAAE8G,UAAW,MAEtB,EAAAiC,EAAA5U,KAACS,EAAAA,EAAUA,CAACC,QAAQ,iBAAQ,+EAK7B4U,IACC,EAAAV,EAAA5U,KAACG,EAAAA,EAAGA,CACFC,GAAI,EACJC,EAAG,EACHC,QAAQ,aACRC,MAAM,qBACNC,aAAc,YAEd,EAAAoU,EAAA5U,KAACS,EAAAA,EAAUA,CAACC,QAAQ,iBAAS4U,OAGjC,EAAAV,EAAAhV,MAACe,EAAAA,EAAWA,CACVZ,WAAS,EACTa,OAAO,SACPO,SAAUiU,EACV3C,cAAY,8BAEZ,EAAAmC,EAAA5U,KAACa,EAAAA,EAAUA,CAAC8S,GAAG,6BAAoB,iBACnC,EAAAiB,EAAA5U,KAACc,EAAAA,EAAMA,CACL2U,QAAQ,oBACRhD,cAAY,cACZ1R,MAAOmU,EACPlU,SAAWC,GAAMkU,EAAgBlU,EAAEC,OAAOH,OAC1CI,SAAUiU,WAET9H,EAAMlM,IAAKC,IACV,MAAMC,EAAYC,OAAOC,QAAQH,EAAKI,QAAU,CAAC,GAC9CL,IAAI,EAAEM,EAAKC,KAAS,GAAGA,SAAWD,KAClCE,KAAK,MACR,OACE,EAAAgT,EAAAhV,MAACiC,EAAAA,EAAQA,CAEPd,MAAOM,EAAKS,KACZ2Q,cAAa,eAAepR,EAAKS,iBAEhCT,EAAKS,KAAK,IAAER,EAAY,IAAIA,KAAe,KAJvCD,EAAKS,cAUpB,EAAA8S,EAAA5U,KAAC+B,EAAAA,EAASA,CACRC,MAAM,sBACNC,YAAY,wCACZC,WAAS,EACTC,KAAM,EACNpC,WAAS,EACTa,OAAO,SACPG,MAAO7B,EACP8B,SAAWC,GAAM9B,EAAW8B,EAAEC,OAAOH,OACrCqB,WAAW,yDACXjB,SAAUiU,QAGd,EAAAR,EAAAhV,MAACyC,EAAAA,EAAaA,YACZ,EAAAuS,EAAA5U,KAACsC,EAAAA,EAAMA,CAACC,QAAS7C,EAAayB,SAAUiU,WAAU,YAGlD,EAAAR,EAAA5U,KAACsC,EAAAA,EAAMA,CACLC,QA/IoBC,UAC1B,GAAK0S,EAAL,CAEAG,GAAY,GACZE,EAAe,MAEf,IAEE,MAAMG,EAAeC,KAAKC,SAASC,SAAS,IAAIC,UAAU,EAAG,IACvDC,EAAa,GAAGtP,KAAkBiP,WACrCM,cACAC,QAAQ,cAAe,KACpBrH,EAAcsH,OAAOC,aAAaF,QAAQ,KAAM,UAGhDrX,EAAYwX,aAAaL,EAAYnH,GAE3C,UAEQhQ,EAAYyX,cAAc,CAC9B5P,iBACA3D,YACA/D,SAAUmW,EACVhW,QAASA,EAAQwD,QAAU,GAC3ByC,YACA4Q,eAGFrR,EAAS8K,KAAK,CACZtM,QAAS,8DACTuM,SAAU,OACVV,QAAS,cAGXoG,EAAgB,IAChBhW,EAAW,IACXV,GAEF,CAAE,MAAO6X,GAEP,UACQ1X,EAAY2X,aAAaR,EACjC,CAAE,MAAOS,GACPxT,QAAQyT,KAAK,qCAAsCD,EACrD,CACA,MAAMF,CACR,CAEF,CAAE,MAAOhX,GACP,MAAM6Q,EAAe7Q,aAAiB2D,MAAQ3D,EAAM4D,QAAU,yBAC9DwB,EAAS8K,KAAK,CACZtM,QAAS,6BAA6BiN,IACtCV,SAAU,QACVV,QAAS,cAEXwG,EAAepF,EACjB,SACEkF,GAAY,EACd,CAzDmB,GA+Ib9U,MAAM,UACNG,QAAQ,YACRS,UAAW+T,GAAgBE,EAC3BjS,UACEiS,GACE,EAAAR,EAAA5U,KAACoD,EAAAA,EAAgBA,CAACC,KAAM,GAAI9C,MAAM,iBAChC+C,WAGL8R,EAAW,gBAAkB,2CCrMjC,SAAS3H,EACdC,GAEA,OAAKA,GAAoC,IAAtBA,EAAW8E,OAIb9E,EAAW5F,KAC1BqG,GAAgB,aAAXA,EAAEC,MAAoC,SAAbD,EAAE1D,QAEb,WAENiD,EAAW5F,KACxBqG,GAAgB,WAAXA,EAAEC,MAAkC,SAAbD,EAAE1D,QAEb,SAEJiD,EAAW5F,KACxBqG,GAAgB,WAAXA,EAAEC,MAAkC,SAAbD,EAAE1D,QAEb,SAEZ,UAlBE,SAmBX,oDCnCA,MAAAlG,GAAsB,WAAAmS,cAAY,CAClC/C,GAAA","sources":["webpack://kuadrant.kuadrant-backstage-plugin-frontend/../node_modules/@material-ui/icons/HourglassEmpty.js","webpack://kuadrant.kuadrant-backstage-plugin-frontend/../node_modules/@material-ui/icons/MoreVert.js","webpack://kuadrant.kuadrant-backstage-plugin-frontend/../node_modules/@material-ui/icons/Warning.js","webpack://kuadrant.kuadrant-backstage-plugin-frontend/./src/components/EditAPIKeyDialog/EditAPIKeyDialog.tsx","webpack://kuadrant.kuadrant-backstage-plugin-frontend/./src/utils/codeSnippets.ts","webpack://kuadrant.kuadrant-backstage-plugin-frontend/./src/components/ApiKeyManagementTab/ApiKeyManagementTab.tsx","webpack://kuadrant.kuadrant-backstage-plugin-frontend/./src/components/ConfirmDeleteDialog/ConfirmDeleteDialog.tsx","webpack://kuadrant.kuadrant-backstage-plugin-frontend/./src/components/RequestAccessDialog/RequestAccessDialog.tsx","webpack://kuadrant.kuadrant-backstage-plugin-frontend/./src/utils/apikeys.ts","webpack://kuadrant.kuadrant-backstage-plugin-frontend/./node_modules/@backstage/plugin-catalog-react/dist/api.esm.js"],"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: \"M6 2v6h.01L6 8.01 10 12l-4 4 .01.01H6V22h12v-5.99h-.01L18 16l-4-4 4-3.99-.01-.01H18V2H6zm10 14.5V20H8v-3.5l4-4 4 4zm-4-5l-4-4V4h8v3.5l-4 4z\"\n}), 'HourglassEmpty');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\"\n}), 'MoreVert');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z\"\n}), 'Warning');\n\nexports.default = _default;","import React, { useState, useEffect } from \"react\";\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Button,\n TextField,\n Box,\n Typography,\n FormControl,\n InputLabel,\n Select,\n MenuItem,\n CircularProgress,\n} from \"@material-ui/core\";\nimport { useApi } from \"@backstage/core-plugin-api\";\nimport { kuadrantApiRef } from '../../api';\nimport { APIKey } from \"../../types/api-management\";\n\ninterface EditAPIKeyDialogProps {\n open: boolean;\n onClose: () => void;\n onSuccess: () => void;\n request: APIKey;\n availablePlans: Array<{\n tier: string;\n description?: string;\n limits?: any;\n }>;\n}\n\nexport const EditAPIKeyDialog = ({\n open,\n onClose,\n onSuccess,\n request,\n availablePlans,\n}: EditAPIKeyDialogProps) => {\n const kuadrantApi = useApi(kuadrantApiRef);\n\n const [planTier, setPlanTier] = useState(\"\");\n const [useCase, setUseCase] = useState(\"\");\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState(\"\");\n\n useEffect(() => {\n if (open && request) {\n setPlanTier(request.spec.planTier || \"\");\n setUseCase(request.spec.useCase || \"\");\n setError(\"\");\n }\n }, [open, request]);\n\n const handleSave = async () => {\n if (!planTier) {\n setError(\"Please select a tier\");\n return;\n }\n\n setError(\"\");\n setSaving(true);\n\n try {\n const patch = {\n spec: {\n planTier,\n useCase: useCase.trim(),\n },\n };\n\n await kuadrantApi.updateRequest(\n request.metadata.name,\n request.metadata.namespace,\n // @ts-ignore Applying a partial obj\n patch,\n );\n\n onSuccess();\n onClose();\n } catch (err) {\n console.error(\"Error updating API key request:\", err);\n setError(err instanceof Error ? err.message : \"Unknown error occurred\");\n } finally {\n setSaving(false);\n }\n };\n\n const handleClose = () => {\n if (!saving) {\n setError(\"\");\n onClose();\n }\n };\n\n return (\n <Dialog open={open} onClose={handleClose} maxWidth=\"sm\" fullWidth>\n <DialogTitle>Edit API Key</DialogTitle>\n <DialogContent>\n {error && (\n <Box\n mb={2}\n p={2}\n bgcolor=\"error.main\"\n color=\"error.contrastText\"\n borderRadius={1}\n >\n <Typography variant=\"body2\">{error}</Typography>\n </Box>\n )}\n\n <FormControl fullWidth margin=\"normal\">\n <InputLabel>Tier</InputLabel>\n <Select\n value={planTier}\n onChange={(e) => setPlanTier(e.target.value as string)}\n disabled={saving}\n >\n {availablePlans.map((plan) => {\n const limitDesc = Object.entries(plan.limits || {})\n .map(([key, val]) => `${val} per ${key}`)\n .join(\", \");\n return (\n <MenuItem key={plan.tier} value={plan.tier}>\n {plan.tier} {limitDesc ? `(${limitDesc})` : \"\"}\n </MenuItem>\n );\n })}\n </Select>\n </FormControl>\n\n <TextField\n label=\"Use Case\"\n placeholder=\"Describe how you plan to use this API\"\n multiline\n rows={3}\n fullWidth\n margin=\"normal\"\n value={useCase}\n onChange={(e) => setUseCase(e.target.value)}\n disabled={saving}\n helperText=\"Explain your intended use of this API for admin review\"\n />\n </DialogContent>\n <DialogActions>\n <Button onClick={handleClose} disabled={saving}>\n Cancel\n </Button>\n <Button\n onClick={handleSave}\n color=\"primary\"\n variant=\"contained\"\n disabled={!planTier || saving}\n startIcon={\n saving ? <CircularProgress size={16} color=\"inherit\" /> : undefined\n }\n >\n {saving ? \"Saving...\" : \"Save Changes\"}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n","import { Credentials } from '../types/api-management';\n\nexport interface CodeSnippets {\n curl: string;\n nodejs: string;\n python: string;\n go: string;\n}\n\nexport function generateAuthCodeSnippets(\n credentials: Credentials | undefined,\n hostname: string,\n apiKey: string,\n): CodeSnippets {\n const baseUrl = `https://${hostname}/api/v1/endpoint`;\n\n if (!credentials) {\n return generateAuthorizationHeaderSnippets(baseUrl, apiKey, 'Bearer');\n }\n\n if (credentials.authorizationHeader) {\n const prefix = credentials!.authorizationHeader!.prefix || '';\n return generateAuthorizationHeaderSnippets(baseUrl, apiKey, prefix);\n }\n\n if (credentials.customHeader) {\n const headerName = credentials!.customHeader!.name;\n const prefix = credentials!.customHeader!.prefix || '';\n return generateCustomHeaderSnippets(baseUrl, apiKey, headerName, prefix);\n }\n\n\n if (credentials.queryString) {\n const paramName = credentials!.queryString!.name;\n return generateQueryStringSnippets(baseUrl, apiKey, paramName);\n }\n\n if (credentials.cookie) {\n const cookieName = credentials!.cookie!.name;\n return generateCookieSnippets(baseUrl, apiKey, cookieName);\n }\n // Default to Authorization Bearer if no authScheme specified\n return generateAuthorizationHeaderSnippets(baseUrl, apiKey, 'Bearer');\n}\n\nfunction generateAuthorizationHeaderSnippets(\n baseUrl: string,\n apiKey: string,\n prefix: string,\n): CodeSnippets {\n const authValue = prefix ? `${prefix} ${apiKey}` : apiKey;\n const prefixWithSpace = prefix ? `${prefix} ` : '';\n\n return {\n curl: `curl -X GET ${baseUrl} \\\\\n -H \"Authorization: ${authValue}\"`,\n\n nodejs: `const fetch = require('node-fetch');\n\nconst apiKey = '${apiKey}';\nconst endpoint = '${baseUrl}';\n\nfetch(endpoint, {\n method: 'GET',\n headers: {\n 'Authorization': '${prefixWithSpace}' + apiKey\n }\n})\n .then(response => response.json())\n .then(data => console.log(data))\n .catch(error => console.error('Error:', error));`,\n\n python: `import requests\n\napi_key = '${apiKey}'\nendpoint = '${baseUrl}'\n\nheaders = {\n 'Authorization': '${prefixWithSpace}' + api_key\n}\n\nresponse = requests.get(endpoint, headers=headers)\nprint(response.json())`,\n\n go: `package main\n\nimport (\n \"fmt\"\n \"net/http\"\n \"io\"\n)\n\nfunc main() {\n apiKey := \"${apiKey}\"\n endpoint := \"${baseUrl}\"\n\n client := &http.Client{}\n req, _ := http.NewRequest(\"GET\", endpoint, nil)\n req.Header.Add(\"Authorization\", \"${prefixWithSpace}\" + apiKey)\n\n resp, err := client.Do(req)\n if err != nil {\n fmt.Println(\"Error:\", err)\n return\n }\n defer resp.Body.Close()\n\n body, _ := io.ReadAll(resp.Body)\n fmt.Println(string(body))\n}`,\n };\n}\n\nfunction generateCustomHeaderSnippets(\n baseUrl: string,\n apiKey: string,\n headerName: string,\n prefix: string,\n): CodeSnippets {\n const headerValue = prefix ? `${prefix}${apiKey}` : apiKey;\n\n return {\n curl: `curl -X GET ${baseUrl} \\\\\n -H \"${headerName}: ${headerValue}\"`,\n\n nodejs: `const fetch = require('node-fetch');\n\nconst apiKey = '${apiKey}';\nconst endpoint = '${baseUrl}';\n\nfetch(endpoint, {\n method: 'GET',\n headers: {\n '${headerName}': '${prefix}' + apiKey\n }\n})\n .then(response => response.json())\n .then(data => console.log(data))\n .catch(error => console.error('Error:', error));`,\n\n python: `import requests\n\napi_key = '${apiKey}'\nendpoint = '${baseUrl}'\n\nheaders = {\n '${headerName}': '${prefix}' + api_key\n}\n\nresponse = requests.get(endpoint, headers=headers)\nprint(response.json())`,\n\n go: `package main\n\nimport (\n \"fmt\"\n \"net/http\"\n \"io\"\n)\n\nfunc main() {\n apiKey := \"${apiKey}\"\n endpoint := \"${baseUrl}\"\n\n client := &http.Client{}\n req, _ := http.NewRequest(\"GET\", endpoint, nil)\n req.Header.Add(\"${headerName}\", \"${prefix}\" + apiKey)\n\n resp, err := client.Do(req)\n if err != nil {\n fmt.Println(\"Error:\", err)\n return\n }\n defer resp.Body.Close()\n\n body, _ := io.ReadAll(resp.Body)\n fmt.Println(string(body))\n}`,\n };\n}\n\nfunction generateQueryStringSnippets(\n baseUrl: string,\n apiKey: string,\n paramName: string,\n): CodeSnippets {\n const urlWithParam = `${baseUrl}?${paramName}=${apiKey}`;\n\n return {\n curl: `curl -X GET \"${urlWithParam}\"`,\n\n nodejs: `const fetch = require('node-fetch');\n\nconst apiKey = '${apiKey}';\nconst endpoint = '${baseUrl}?${paramName}=' + apiKey;\n\nfetch(endpoint, {\n method: 'GET'\n})\n .then(response => response.json())\n .then(data => console.log(data))\n .catch(error => console.error('Error:', error));`,\n\n python: `import requests\n\napi_key = '${apiKey}'\nendpoint = '${baseUrl}'\n\nparams = {\n '${paramName}': api_key\n}\n\nresponse = requests.get(endpoint, params=params)\nprint(response.json())`,\n\n go: `package main\n\nimport (\n \"fmt\"\n \"net/http\"\n \"io\"\n)\n\nfunc main() {\n apiKey := \"${apiKey}\"\n endpoint := \"${baseUrl}?${paramName}=\" + apiKey\n\n client := &http.Client{}\n req, _ := http.NewRequest(\"GET\", endpoint, nil)\n\n resp, err := client.Do(req)\n if err != nil {\n fmt.Println(\"Error:\", err)\n return\n }\n defer resp.Body.Close()\n\n body, _ := io.ReadAll(resp.Body)\n fmt.Println(string(body))\n}`,\n };\n}\n\nfunction generateCookieSnippets(\n baseUrl: string,\n apiKey: string,\n cookieName: string,\n): CodeSnippets {\n return {\n curl: `curl -X GET ${baseUrl} \\\\\n --cookie \"${cookieName}=${apiKey}\"`,\n\n nodejs: `const fetch = require('node-fetch');\n\nconst apiKey = '${apiKey}';\nconst endpoint = '${baseUrl}';\n\nfetch(endpoint, {\n method: 'GET',\n headers: {\n 'Cookie': '${cookieName}=' + apiKey\n }\n})\n .then(response => response.json())\n .then(data => console.log(data))\n .catch(error => console.error('Error:', error));`,\n\n python: `import requests\n\napi_key = '${apiKey}'\nendpoint = '${baseUrl}'\n\ncookies = {\n '${cookieName}': api_key\n}\n\nresponse = requests.get(endpoint, cookies=cookies)\nprint(response.json())`,\n\n go: `package main\n\nimport (\n \"fmt\"\n \"net/http\"\n \"io\"\n)\n\nfunc main() {\n apiKey := \"${apiKey}\"\n endpoint := \"${baseUrl}\"\n\n client := &http.Client{}\n req, _ := http.NewRequest(\"GET\", endpoint, nil)\n req.AddCookie(&http.Cookie{\n Name: \"${cookieName}\",\n Value: apiKey,\n })\n\n resp, err := client.Do(req)\n if err != nil {\n fmt.Println(\"Error:\", err)\n return\n }\n defer resp.Body.Close()\n\n body, _ := io.ReadAll(resp.Body)\n fmt.Println(string(body))\n}`,\n };\n}\n","import React, { useState, useMemo } from \"react\";\nimport { useAsync } from \"react-use\";\nimport {\n Table,\n TableColumn,\n ResponseErrorPanel,\n CodeSnippet,\n} from \"@backstage/core-components\";\nimport {\n IconButton,\n Typography,\n Box,\n Chip,\n Grid,\n Button,\n Tabs,\n Tab,\n Menu,\n MenuItem,\n Tooltip,\n CircularProgress,\n} from \"@material-ui/core\";\nimport { Skeleton } from \"@material-ui/lab\";\nimport {\n useApi,\n identityApiRef,\n alertApiRef,\n} from \"@backstage/core-plugin-api\";\nimport { kuadrantApiRef } from '../../api';\nimport { UserEntity } from '@backstage/catalog-model';\nimport { useEntity, catalogApiRef } from \"@backstage/plugin-catalog-react\";\nimport VisibilityIcon from \"@material-ui/icons/Visibility\";\nimport VisibilityOffIcon from \"@material-ui/icons/VisibilityOff\";\nimport HourglassEmptyIcon from \"@material-ui/icons/HourglassEmpty\";\nimport CancelIcon from \"@material-ui/icons/Cancel\";\nimport AddIcon from \"@material-ui/icons/Add\";\nimport MoreVertIcon from \"@material-ui/icons/MoreVert\";\nimport FileCopyIcon from \"@material-ui/icons/FileCopy\";\nimport { APIKey, APIProduct, Plan } from \"../../types/api-management\";\nimport {\n kuadrantApiKeyCreatePermission,\n kuadrantApiKeyDeleteOwnPermission,\n kuadrantApiKeyDeleteAllPermission,\n kuadrantApiKeyUpdateOwnPermission,\n} from \"../../permissions\";\nimport {\n useKuadrantPermission,\n canDeleteResource,\n} from \"../../utils/permissions\";\nimport { getAPIKeyPhase } from \"../../utils/apikeys\";\nimport { EditAPIKeyDialog } from \"../EditAPIKeyDialog\";\nimport { ConfirmDeleteDialog } from \"../ConfirmDeleteDialog\";\nimport { generateAuthCodeSnippets } from \"../../utils/codeSnippets\";\nimport { RequestAccessDialog } from \"../RequestAccessDialog\";\n\nexport interface ApiKeyManagementTabProps {\n namespace?: string;\n}\n\nexport const ApiKeyManagementTab = ({\n namespace: propNamespace,\n}: ApiKeyManagementTabProps) => {\n const { entity } = useEntity();\n const catalogAPI = useApi(catalogApiRef);\n const kuadrantApi = useApi(kuadrantApiRef);\n const identityApi = useApi(identityApiRef);\n const alertApi = useApi(alertApiRef);\n const [visibleKeys, setVisibleKeys] = useState<Set<string>>(new Set());\n const [refresh, setRefresh] = useState(0);\n const [userId, setUserId] = useState<string>(\"\");\n const [userEmail, setUserEmail] = useState<string>(\"\");\n const [requestDialogOpen, setRequestDialogOpen] = useState(false);\n const [editDialogOpen, setEditDialogOpen] = useState(false);\n const [requestToEdit, setRequestToEdit] = useState<APIKey | null>(null);\n const [menuAnchor, setMenuAnchor] = useState<{\n top: number;\n left: number;\n } | null>(null);\n const [menuRequest, setMenuRequest] = useState<APIKey | null>(null);\n const [deleting, setDeleting] = useState<string | null>(null);\n const [optimisticallyDeleted, setOptimisticallyDeleted] = useState<\n Set<string>\n >(new Set());\n const [deleteDialogState, setDeleteDialogState] = useState<{\n open: boolean;\n request: APIKey | null;\n }>({ open: false, request: null });\n const [apiKeyValues, setApiKeyValues] = useState<Map<string, string>>(\n new Map(),\n );\n const [apiKeyLoading, setApiKeyLoading] = useState<Set<string>>(new Set());\n\n // get apiproduct name from entity annotation (set by entity provider)\n const apiProductName =\n entity.metadata.annotations?.[\"kuadrant.io/apiproduct\"] ||\n entity.metadata.name;\n const namespace =\n entity.metadata.annotations?.[\"kuadrant.io/namespace\"] ||\n propNamespace ||\n \"default\";\n\n useAsync(async () => {\n const identity = await identityApi.getBackstageIdentity();\n const profile = await identityApi.getProfileInfo();\n setUserId(identity.userEntityRef);\n\n // Try profile email first (works for OAuth providers)\n let email = profile.email || \"\";\n // Fallback to catalog entity for guest/other providers\n if (!email && identity.userEntityRef) {\n const userEntity = await catalogAPI.getEntityByRef(identity.userEntityRef) as UserEntity;\n if (userEntity?.spec?.profile?.email) {\n email = userEntity.spec.profile.email as string;\n }\n }\n\n setUserEmail(email);\n }, [identityApi]);\n\n const {\n value: requests,\n loading: requestsLoading,\n error: requestsError,\n } = useAsync(async () => {\n // backend filters by apiProductRef.name and scopes to user's consumer namespace\n const data = await kuadrantApi.getRequestsByApiProduct(apiProductName, namespace);\n return data.items || [];\n }, [apiProductName, namespace, refresh, kuadrantApi]);\n\n const {\n value: apiProduct,\n loading: plansLoading,\n error: plansError,\n } = useAsync(async () => {\n const data = await kuadrantApi.getApiProducts();\n\n const product = data.items?.find(\n (p: APIProduct) =>\n p.metadata.namespace === namespace &&\n p.metadata.name === apiProductName,\n );\n\n return product;\n }, [namespace, apiProductName, kuadrantApi]);\n\n // check permissions with resource reference once we have the apiproduct\n const resourceRef = apiProduct\n ? `apiproduct:${apiProduct.metadata.namespace}/${apiProduct.metadata.name}`\n : undefined;\n\n const {\n allowed: canCreateRequest,\n loading: createRequestPermissionLoading,\n error: createRequestPermissionError,\n } = useKuadrantPermission(kuadrantApiKeyCreatePermission, resourceRef);\n\n const {\n allowed: canDeleteOwnKey,\n loading: deleteOwnPermissionLoading,\n error: deleteOwnPermissionError,\n } = useKuadrantPermission(kuadrantApiKeyDeleteOwnPermission);\n\n const {\n allowed: canDeleteAllKeys,\n loading: deleteAllPermissionLoading,\n error: deleteAllPermissionError,\n } = useKuadrantPermission(kuadrantApiKeyDeleteAllPermission);\n\n const {\n allowed: canUpdateRequest,\n loading: updateRequestPermissionLoading,\n error: updateRequestPermissionError,\n } = useKuadrantPermission(kuadrantApiKeyUpdateOwnPermission);\n\n const handleDeleteRequest = async (deleteNamespace: string, deleteName: string) => {\n // optimistic update - remove from UI immediately\n setOptimisticallyDeleted((prev) => new Set(prev).add(deleteName));\n setDeleting(deleteName);\n try {\n await kuadrantApi.deleteRequest(deleteNamespace, deleteName);\n alertApi.post({\n message: \"API key deleted successfully\",\n severity: \"success\",\n display: \"transient\",\n });\n setRefresh((r) => r + 1);\n } catch (err) {\n const errorMessage =\n err instanceof Error ? err.message : \"unknown error occurred\";\n // rollback optimistic update on error\n setOptimisticallyDeleted((prev) => {\n const next = new Set(prev);\n next.delete(deleteName);\n return next;\n });\n alertApi.post({\n message: `Failed to delete API key: ${errorMessage}`,\n severity: \"error\",\n display: \"transient\",\n });\n } finally {\n setDeleting(null);\n }\n };\n\n const fetchApiKeyFromSecret = async (\n requestNamespace: string,\n requestName: string,\n ) => {\n const key = `${requestNamespace}/${requestName}`;\n if (apiKeyLoading.has(key)) {\n return;\n }\n\n setApiKeyLoading((prev) => new Set(prev).add(key));\n try {\n const data = await kuadrantApi.getApiKeySecret(requestNamespace, requestName);\n setApiKeyValues((prev) => new Map(prev).set(key, data.apiKey));\n toggleVisibility(requestName);\n } catch (err) {\n const errorMessage =\n err instanceof Error ? err.message : \"unknown error occurred\";\n alertApi.post({\n message: `Failed to fetch api key: ${errorMessage}`,\n severity: \"error\",\n display: \"transient\",\n });\n } finally {\n setApiKeyLoading((prev) => {\n const next = new Set(prev);\n next.delete(key);\n return next;\n });\n }\n };\n\n const clearApiKeyValue = (requestNamespace: string, requestName: string) => {\n const key = `${requestNamespace}/${requestName}`;\n setApiKeyValues((prev) => {\n const next = new Map(prev);\n next.delete(key);\n return next;\n });\n };\n\n const handleEditRequest = (request: APIKey) => {\n setRequestToEdit(request);\n setEditDialogOpen(true);\n };\n\n const handleEditSuccess = () => {\n setRefresh((r) => r + 1);\n setEditDialogOpen(false);\n alertApi.post({\n message: \"API key updated\",\n severity: \"success\",\n display: \"transient\",\n });\n setRequestToEdit(null);\n };\n\n const handleMenuClose = () => {\n setMenuAnchor(null);\n setMenuRequest(null);\n };\n\n const handleMenuEdit = () => {\n if (!menuRequest) return;\n handleEditRequest(menuRequest);\n handleMenuClose();\n };\n\n const handleMenuDeleteClick = () => {\n if (!menuRequest) return;\n const request = menuRequest;\n handleMenuClose();\n setDeleteDialogState({ open: true, request });\n };\n\n const handleDeleteConfirm = async () => {\n if (!deleteDialogState.request) return;\n await handleDeleteRequest(\n deleteDialogState.request.metadata.namespace,\n deleteDialogState.request.metadata.name,\n );\n setDeleteDialogState({ open: false, request: null });\n };\n\n const handleDeleteCancel = () => {\n setDeleteDialogState({ open: false, request: null });\n };\n\n const toggleVisibility = (keyName: string) => {\n setVisibleKeys((prev) => {\n const newSet = new Set(prev);\n if (newSet.has(keyName)) {\n newSet.delete(keyName);\n } else {\n newSet.add(keyName);\n }\n return newSet;\n });\n };\n\n const detailPanelConfig = useMemo(\n () => [\n {\n render: (data: any) => {\n // backstage Table wraps the data in { rowData: actualData }\n const request = data.rowData as APIKey;\n if (!request?.metadata?.name) {\n return <Box />;\n }\n\n // pass already-revealed key from parent state (don't auto-fetch - that consumes show-once)\n const key = `${request.metadata.namespace}/${request.metadata.name}`;\n const revealedKey = apiKeyValues.get(key);\n return (\n <DetailPanelContent\n request={request}\n apiName={apiProductName}\n revealedApiKey={revealedKey}\n />\n );\n },\n },\n ],\n [apiProductName, apiKeyValues],\n );\n\n // separate component to isolate state\n const DetailPanelContent = ({\n request,\n apiName: api,\n revealedApiKey,\n }: {\n request: APIKey;\n apiName: string;\n revealedApiKey?: string;\n }) => {\n const [selectedLanguage, setSelectedLanguage] = useState(0);\n const hostname = request.status?.apiHostname || `${api}.apps.example.com`;\n\n // use revealed key if available, otherwise show placeholder\n const displayApiKey = revealedApiKey || \"<your-api-key>\";\n\n // Generate code snippets based on authScheme credentials\n const credentials = request.status?.authScheme?.credentials;\n const snippets = generateAuthCodeSnippets(credentials, hostname, displayApiKey);\n\n return (\n <Box\n p={3}\n bgcolor=\"background.default\"\n onClick={(e) => e.stopPropagation()}\n >\n {request.spec.useCase && (\n <Box mb={3}>\n <Typography variant=\"h6\" gutterBottom>\n Use Case\n </Typography>\n <Box\n p={2}\n bgcolor=\"background.paper\"\n borderRadius={1}\n border=\"1px solid rgba(0, 0, 0, 0.12)\"\n >\n <Typography\n variant=\"body2\"\n style={{\n whiteSpace: \"pre-wrap\",\n wordBreak: \"break-word\",\n overflowWrap: \"break-word\",\n }}\n >\n {request.spec.useCase}\n </Typography>\n </Box>\n </Box>\n )}\n <Typography variant=\"h6\" gutterBottom>\n Usage Examples\n </Typography>\n <Typography variant=\"body2\" paragraph>\n Use these code examples to test the API with your{\" \"}\n {request.spec.planTier} tier key.\n </Typography>\n <Box onClick={(e) => e.stopPropagation()}>\n <Tabs\n value={selectedLanguage}\n onChange={(e, newValue) => {\n e.stopPropagation();\n setSelectedLanguage(newValue);\n }}\n indicatorColor=\"primary\"\n >\n <Tab label=\"cURL\" onClick={(e) => e.stopPropagation()} />\n <Tab label=\"Node.js\" onClick={(e) => e.stopPropagation()} />\n <Tab label=\"Python\" onClick={(e) => e.stopPropagation()} />\n <Tab label=\"Go\" onClick={(e) => e.stopPropagation()} />\n </Tabs>\n </Box>\n <Box mt={2}>\n {selectedLanguage === 0 && (\n <CodeSnippet\n text={snippets.curl}\n language=\"bash\"\n showCopyCodeButton\n />\n )}\n {selectedLanguage === 1 && (\n <CodeSnippet\n text={snippets.nodejs}\n language=\"javascript\"\n showCopyCodeButton\n />\n )}\n {selectedLanguage === 2 && (\n <CodeSnippet\n text={snippets.python}\n language=\"python\"\n showCopyCodeButton\n />\n )}\n {selectedLanguage === 3 && (\n <CodeSnippet\n text={snippets.go}\n language=\"go\"\n showCopyCodeButton\n />\n )}\n </Box>\n </Box>\n );\n };\n\n const loading =\n requestsLoading ||\n plansLoading ||\n createRequestPermissionLoading ||\n deleteOwnPermissionLoading ||\n deleteAllPermissionLoading ||\n updateRequestPermissionLoading;\n const error = requestsError || plansError;\n const permissionError =\n createRequestPermissionError ||\n deleteOwnPermissionError ||\n deleteAllPermissionError ||\n updateRequestPermissionError;\n\n if (loading) {\n return (\n <Box p={2}>\n {[...Array(5)].map((_, i) => (\n <Box key={i} p={2}>\n <Skeleton variant=\"text\" width=\"100%\" />\n </Box>\n ))}\n </Box>\n );\n }\n\n if (error) {\n return <ResponseErrorPanel error={error} />;\n }\n\n if (permissionError) {\n const failedPermission = createRequestPermissionError\n ? \"kuadrant.apikey.create\"\n : deleteOwnPermissionError\n ? \"kuadrant.apikey.delete.own\"\n : deleteAllPermissionError\n ? \"kuadrant.apikey.delete.all\"\n : updateRequestPermissionError\n ? \"kuadrant.apikey.update.own\"\n : \"unknown\";\n return (\n <Box p={2}>\n <Typography color=\"error\">\n Unable to check permissions: {permissionError.message}\n </Typography>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Permission: {failedPermission}\n </Typography>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Please try again or contact your administrator\n </Typography>\n </Box>\n );\n }\n\n const myRequests = ((requests || []) as APIKey[]).filter(\n (r) => !optimisticallyDeleted.has(r.metadata.name),\n );\n const plans = (apiProduct?.status?.discoveredPlans || []) as Plan[];\n\n const pendingRequests = myRequests.filter(\n (r) => getAPIKeyPhase(r.status?.conditions) === \"Pending\",\n );\n const approvedRequests = myRequests.filter(\n (r) => getAPIKeyPhase(r.status?.conditions) === \"Approved\",\n );\n const rejectedRequests = myRequests.filter(\n (r) => getAPIKeyPhase(r.status?.conditions) === \"Denied\",\n );\n\n const approvedColumns: TableColumn<APIKey>[] = [\n {\n title: \"Tier\",\n field: \"spec.planTier\",\n render: (row: APIKey) => (\n <Chip label={row.spec.planTier} color=\"primary\" size=\"small\" />\n ),\n },\n {\n title: \"Approved\",\n field: \"status.conditions\",\n render: (row: APIKey) => {\n const approvalDate = row.status?.conditions?.find(\n c => c.type === 'Approved' && c.status === 'True'\n )?.lastTransitionTime;\n return (\n <Typography variant=\"body2\">\n {approvalDate ? new Date(approvalDate).toLocaleDateString() : \"-\"}\n </Typography>\n );\n },\n },\n {\n title: \"API Key\",\n field: \"status.secretRef\",\n searchable: false,\n filtering: false,\n render: (row: APIKey) => {\n const key = `${row.metadata.namespace}/${row.metadata.name}`;\n const isVisible = visibleKeys.has(row.metadata.name);\n const isLoading = apiKeyLoading.has(key);\n const apiKeyValue = apiKeyValues.get(key);\n const hasSecretRef = Boolean(row.spec?.secretRef?.name);\n\n if (!hasSecretRef) {\n return (\n <Typography variant=\"body2\" color=\"textSecondary\">\n Awaiting secret...\n </Typography>\n );\n }\n\n const handleRevealClick = () => {\n if (isVisible) {\n clearApiKeyValue(row.metadata.namespace, row.metadata.name);\n toggleVisibility(row.metadata.name);\n } else {\n fetchApiKeyFromSecret(row.metadata.namespace, row.metadata.name);\n }\n };\n\n const handleCopy = async () => {\n if (apiKeyValue) {\n await navigator.clipboard.writeText(apiKeyValue);\n alertApi.post({\n message: \"API key copied to clipboard\",\n severity: \"success\",\n display: \"transient\",\n });\n }\n };\n\n return (\n <Box display=\"flex\" alignItems=\"center\">\n <Typography\n variant=\"body2\"\n style={{\n fontFamily: \"monospace\",\n marginRight: 8,\n }}\n >\n {isLoading\n ? \"Loading...\"\n : isVisible && apiKeyValue\n ? apiKeyValue\n : \"••••••••••••••••\"}\n </Typography>\n {isVisible && apiKeyValue && (\n <Tooltip title=\"Copy to clipboard\">\n <IconButton size=\"small\" onClick={handleCopy}>\n <FileCopyIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n )}\n <Tooltip\n title={isVisible ? \"Hide API key\" : \"Reveal API key\"}\n >\n <span>\n <IconButton\n size=\"small\"\n onClick={handleRevealClick}\n disabled={isLoading}\n >\n {isVisible ? <VisibilityOffIcon /> : <VisibilityIcon />}\n </IconButton>\n </span>\n </Tooltip>\n </Box>\n );\n },\n },\n {\n title: \"\",\n field: \"actions\",\n searchable: false,\n filtering: false,\n render: (row: APIKey) => {\n const isDeleting = deleting === row.metadata.name;\n if (isDeleting) {\n return <CircularProgress size={20} />;\n }\n const ownerId = row.spec.requestedBy.userId;\n const canDelete = canDeleteResource(\n ownerId,\n userId,\n canDeleteOwnKey,\n canDeleteAllKeys,\n );\n if (!canDelete) return null;\n return (\n <IconButton\n size=\"small\"\n onClick={(e) => {\n e.stopPropagation();\n const rect = e.currentTarget.getBoundingClientRect();\n setMenuAnchor({ top: rect.bottom, left: rect.left });\n setMenuRequest(row);\n }}\n title=\"Actions\"\n aria-controls={menuAnchor ? \"actions-menu\" : undefined}\n aria-haspopup=\"true\"\n >\n <MoreVertIcon />\n </IconButton>\n );\n },\n },\n ];\n\n const requestColumns: TableColumn<APIKey>[] = [\n {\n title: \"Status\",\n field: \"status.conditions\",\n render: (row: APIKey) => {\n const phase = getAPIKeyPhase(row.status?.conditions || []);\n const isPending = phase === \"Pending\";\n return (\n <Chip\n label={phase}\n size=\"small\"\n icon={isPending ? <HourglassEmptyIcon /> : <CancelIcon />}\n color={isPending ? \"default\" : \"secondary\"}\n />\n );\n },\n },\n {\n title: \"Tier\",\n field: \"spec.planTier\",\n render: (row: APIKey) => (\n <Chip label={row.spec.planTier} color=\"primary\" size=\"small\" />\n ),\n },\n {\n title: \"Use Case\",\n field: \"spec.useCase\",\n render: (row: APIKey) => {\n if (!row.spec.useCase) {\n return <Typography variant=\"body2\">-</Typography>;\n }\n return (\n <Tooltip title={row.spec.useCase} placement=\"top\">\n <Typography\n variant=\"body2\"\n style={{\n maxWidth: \"200px\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {row.spec.useCase}\n </Typography>\n </Tooltip>\n );\n },\n },\n {\n title: \"Requested\",\n field: \"metadata.creationTimestamp\",\n render: (row: APIKey) => (\n <Typography variant=\"body2\">\n {row.metadata.creationTimestamp\n ? new Date(row.metadata.creationTimestamp).toLocaleDateString()\n : \"-\"}\n </Typography>\n ),\n },\n {\n title: \"Reviewed\",\n field: \"status.conditions\",\n render: (row: APIKey) => {\n const approvedDate = row.status?.conditions?.find(\n c => (c.type === 'Approved' || c.type === 'Denied') && c.status === 'True'\n )?.lastTransitionTime;\n return (\n <Typography variant=\"body2\">\n {approvedDate ? new Date(approvedDate).toLocaleDateString() : \"-\"}\n </Typography>\n );\n },\n },\n {\n title: \"\",\n field: \"actions\",\n searchable: false,\n filtering: false,\n render: (row: APIKey) => {\n const isDeleting = deleting === row.metadata.name;\n if (isDeleting) {\n return <CircularProgress size={20} />;\n }\n const isPending = getAPIKeyPhase(row.status?.conditions || []) === \"Pending\";\n const ownerId = row.spec.requestedBy.userId;\n const canDelete = canDeleteResource(\n ownerId,\n userId,\n canDeleteOwnKey,\n canDeleteAllKeys,\n );\n const canEdit = canUpdateRequest && ownerId === userId;\n if (!isPending || (!canEdit && !canDelete)) return null;\n return (\n <IconButton\n size=\"small\"\n onClick={(e) => {\n e.stopPropagation();\n const rect = e.currentTarget.getBoundingClientRect();\n setMenuAnchor({ top: rect.bottom, left: rect.left });\n setMenuRequest(row);\n }}\n title=\"Actions\"\n aria-controls={menuAnchor ? \"actions-menu\" : undefined}\n aria-haspopup=\"true\"\n >\n <MoreVertIcon />\n </IconButton>\n );\n },\n },\n ];\n\n // Filter columns for pending requests (no Reviewed or Reason)\n const pendingRequestColumns = requestColumns.filter(\n (col) => col.title !== \"Reviewed\" && col.title !== \"Reason\",\n );\n\n return (\n <Box p={2}>\n <Grid container spacing={3} direction=\"column\">\n {canCreateRequest && (\n <Grid item>\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n alignItems=\"flex-end\"\n mb={2}\n >\n <Button\n variant=\"contained\"\n color=\"primary\"\n startIcon={<AddIcon />}\n onClick={() => setRequestDialogOpen(true)}\n disabled={plans.length === 0 || !userEmail}\n data-testid=\"request-api-access-button\"\n data-plans-count={plans.length}\n >\n Request API Access\n </Button>\n {!userEmail && (\n <Typography\n variant=\"caption\"\n color=\"textSecondary\"\n style={{ marginTop: 4 }}\n data-testid=\"no-email-message\"\n >\n \"Email address is required\"\n </Typography>\n )}\n {plans.length === 0 && (\n <Typography\n variant=\"caption\"\n color=\"textSecondary\"\n style={{ marginTop: 4 }}\n data-testid=\"no-plans-message\"\n >\n {!apiProduct\n ? \"API product not found\"\n : (() => {\n const readyCondition =\n apiProduct.status?.conditions?.find(\n (c: any) => c.type === \"Ready\",\n );\n const planCondition =\n apiProduct.status?.conditions?.find(\n (c: any) => c.type === \"PlanPolicyDiscovered\",\n );\n\n if (readyCondition?.status !== \"True\") {\n return `HTTPRoute not ready: ${readyCondition?.message || \"unknown\"}`;\n }\n if (planCondition?.status !== \"True\") {\n return `No plans discovered: ${planCondition?.message || \"no PlanPolicy found\"}`;\n }\n return \"No plans available\";\n })()}\n </Typography>\n )}\n </Box>\n </Grid>\n )}\n {pendingRequests.length === 0 &&\n rejectedRequests.length === 0 &&\n approvedRequests.length === 0 && (\n <Grid item>\n <Box p={3} textAlign=\"center\">\n <Typography variant=\"body1\" color=\"textSecondary\">\n No API keys yet. Request access to get started.\n </Typography>\n </Box>\n </Grid>\n )}\n {pendingRequests.length > 0 && (\n <Grid item>\n <Table\n title=\"Pending Requests\"\n options={{\n paging: pendingRequests.length > 5,\n pageSize: 20,\n search: true,\n filtering: true,\n debounceInterval: 300,\n toolbar: true,\n emptyRowsWhenPaging: false,\n }}\n columns={pendingRequestColumns}\n data={pendingRequests}\n />\n </Grid>\n )}\n {rejectedRequests.length > 0 && (\n <Grid item>\n <Table\n title=\"Denied Requests\"\n options={{\n paging: rejectedRequests.length > 5,\n pageSize: 20,\n search: true,\n filtering: true,\n debounceInterval: 300,\n toolbar: true,\n emptyRowsWhenPaging: false,\n }}\n columns={requestColumns}\n data={rejectedRequests}\n />\n </Grid>\n )}\n {approvedRequests.length > 0 && (\n <Grid item>\n <Table\n key=\"api-keys-table\"\n title=\"API Keys\"\n options={{\n paging: approvedRequests.length > 5,\n pageSize: 20,\n search: true,\n filtering: true,\n debounceInterval: 300,\n toolbar: true,\n emptyRowsWhenPaging: false,\n }}\n columns={approvedColumns}\n data={approvedRequests}\n detailPanel={detailPanelConfig}\n />\n </Grid>\n )}\n </Grid>\n\n <RequestAccessDialog\n open={requestDialogOpen}\n onClose={() => setRequestDialogOpen(false)}\n onSuccess={() => {\n setRequestDialogOpen(false);\n setRefresh((r) => r + 1);\n }}\n apiProductName={apiProductName}\n namespace={namespace}\n userEmail={userEmail}\n plans={plans}\n />\n\n <Menu\n id=\"actions-menu\"\n open={Boolean(menuAnchor)}\n onClose={handleMenuClose}\n anchorReference=\"anchorPosition\"\n anchorPosition={menuAnchor || { top: 0, left: 0 }}\n >\n {menuRequest &&\n (() => {\n const isPending = getAPIKeyPhase(menuRequest.status?.conditions || []) === \"Pending\";\n const ownerId = menuRequest.spec.requestedBy.userId;\n const canEdit = canUpdateRequest && ownerId === userId && isPending;\n\n const items = [];\n if (canEdit) {\n items.push(\n <MenuItem key=\"edit\" onClick={handleMenuEdit}>\n Edit\n </MenuItem>,\n );\n }\n items.push(\n <MenuItem key=\"delete\" onClick={handleMenuDeleteClick}>\n Delete\n </MenuItem>,\n );\n return items;\n })()}\n </Menu>\n\n {requestToEdit && (\n <EditAPIKeyDialog\n open={editDialogOpen}\n onClose={() => {\n setEditDialogOpen(false);\n setRequestToEdit(null);\n }}\n onSuccess={handleEditSuccess}\n request={requestToEdit}\n availablePlans={plans}\n />\n )}\n\n <ConfirmDeleteDialog\n open={deleteDialogState.open}\n title=\"Delete Request\"\n description={`Are you sure you want to delete this ${getAPIKeyPhase(deleteDialogState.request?.status?.conditions || []) === \"Approved\" ? \"API key\" : \"request\"}?`}\n deleting={deleting !== null}\n onConfirm={handleDeleteConfirm}\n onCancel={handleDeleteCancel}\n />\n </Box>\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogContentText,\n DialogActions,\n Button,\n TextField,\n Typography,\n Box,\n CircularProgress,\n} from '@material-ui/core';\nimport WarningIcon from '@material-ui/icons/Warning';\n\nexport interface ConfirmDeleteDialogProps {\n open: boolean;\n title: string;\n description: string;\n // for dangerous deletes, require typing this text to confirm\n confirmText?: string;\n // severity affects styling - 'high' shows warning icon and requires text confirmation\n severity?: 'normal' | 'high';\n deleting?: boolean;\n onConfirm: () => void;\n onCancel: () => void;\n}\n\nexport const ConfirmDeleteDialog = ({\n open,\n title,\n description,\n confirmText,\n severity = 'normal',\n deleting = false,\n onConfirm,\n onCancel,\n}: ConfirmDeleteDialogProps) => {\n const [inputValue, setInputValue] = useState('');\n\n // reset input when dialog opens/closes\n useEffect(() => {\n if (!open) {\n setInputValue('');\n }\n }, [open]);\n\n const requiresTextConfirmation = severity === 'high' && confirmText;\n const canConfirm = requiresTextConfirmation ? inputValue === confirmText : true;\n\n const handleConfirm = () => {\n if (canConfirm) {\n onConfirm();\n }\n };\n\n return (\n <Dialog\n open={open}\n onClose={deleting ? undefined : onCancel}\n maxWidth=\"sm\"\n fullWidth\n >\n <DialogTitle>\n {severity === 'high' && (\n <Box display=\"flex\" alignItems=\"center\" style={{ gap: 8 }}>\n <WarningIcon color=\"error\" />\n <span>{title}</span>\n </Box>\n )}\n {severity !== 'high' && title}\n </DialogTitle>\n <DialogContent>\n <DialogContentText style={{ whiteSpace: 'pre-line' }}>\n {description}\n </DialogContentText>\n {requiresTextConfirmation && (\n <Box mt={2}>\n <Typography variant=\"body2\" color=\"textSecondary\" gutterBottom>\n Type <strong>{confirmText}</strong> to confirm:\n </Typography>\n <TextField\n fullWidth\n variant=\"outlined\"\n size=\"small\"\n value={inputValue}\n onChange={e => setInputValue(e.target.value)}\n disabled={deleting}\n autoFocus\n placeholder={confirmText}\n />\n </Box>\n )}\n </DialogContent>\n <DialogActions>\n <Button onClick={onCancel} disabled={deleting}>\n Cancel\n </Button>\n <Button\n onClick={handleConfirm}\n color=\"secondary\"\n variant=\"contained\"\n disabled={deleting || !canConfirm}\n startIcon={deleting ? <CircularProgress size={16} color=\"inherit\" /> : undefined}\n >\n {deleting ? 'Deleting...' : 'Delete'}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n","import React, { useState } from 'react';\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Button,\n TextField,\n Select,\n MenuItem,\n FormControl,\n InputLabel,\n Box,\n Typography,\n CircularProgress,\n} from '@material-ui/core';\nimport InfoIcon from '@material-ui/icons/Info';\nimport {\n useApi,\n alertApiRef,\n} from '@backstage/core-plugin-api';\nimport { kuadrantApiRef } from '../../api';\nimport { Plan } from \"../../types/api-management.ts\";\n\nexport interface RequestAccessDialogProps {\n open: boolean;\n onClose: () => void;\n onSuccess: () => void;\n apiProductName: string;\n namespace: string;\n userEmail: string;\n plans: Plan[];\n}\n\nexport const RequestAccessDialog = ({\n open,\n onClose,\n onSuccess,\n apiProductName,\n namespace,\n userEmail,\n plans,\n}: RequestAccessDialogProps) => {\n const kuadrantApi = useApi(kuadrantApiRef);\n const alertApi = useApi(alertApiRef);\n\n const [selectedPlan, setSelectedPlan] = useState('');\n const [useCase, setUseCase] = useState('');\n const [creating, setCreating] = useState(false);\n const [createError, setCreateError] = useState<string | null>(null);\n\n const handleClose = () => {\n setSelectedPlan('');\n setUseCase('');\n setCreateError(null);\n onClose();\n };\n\n const handleRequestAccess = async () => {\n if (!selectedPlan) return;\n\n setCreating(true);\n setCreateError(null);\n\n try {\n // 1. generate secret name and API key value\n const randomSuffix = Math.random().toString(36).substring(2, 10);\n const secretName = `${apiProductName}-${randomSuffix}-secret`\n .toLowerCase()\n .replace(/[^a-z0-9-]/g, '-');\n const apiKeyValue = crypto.randomUUID().replace(/-/g, '');\n\n // 2. create secret in consumer's namespace first (design doc: secret before APIKey)\n await kuadrantApi.createSecret(secretName, apiKeyValue);\n\n try {\n // 3. create APIKey referencing the pre-existing secret\n await kuadrantApi.createRequest({\n apiProductName,\n namespace,\n planTier: selectedPlan,\n useCase: useCase.trim() || '',\n userEmail,\n secretName,\n });\n\n alertApi.post({\n message: `Request submitted successfully. Pending API owner approval.`,\n severity: 'info',\n display: 'transient',\n });\n\n setSelectedPlan('');\n setUseCase('');\n onSuccess();\n\n } catch (apiKeyError) {\n // cleanup orphaned secret if APIKey creation fails\n try {\n await kuadrantApi.deleteSecret(secretName);\n } catch (deleteError) {\n console.warn('Failed to cleanup orphaned secret:', deleteError);\n }\n throw apiKeyError;\n }\n\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'unknown error occurred';\n alertApi.post({\n message: `Failed to create request: ${errorMessage}`,\n severity: 'error',\n display: 'transient',\n });\n setCreateError(errorMessage);\n } finally {\n setCreating(false);\n }\n };\n\n return (\n <Dialog open={open} onClose={handleClose} maxWidth=\"sm\" fullWidth>\n <DialogTitle>Request API Access</DialogTitle>\n <DialogContent>\n <Box\n mb={2}\n p={1.5}\n bgcolor=\"info.light\"\n borderRadius={1}\n display=\"flex\"\n alignItems=\"flex-start\"\n style={{ gap: 8 }}\n >\n <InfoIcon\n color=\"primary\"\n fontSize=\"small\"\n style={{ marginTop: 2 }}\n />\n <Typography variant=\"body2\">\n Your request will be reviewed by an API owner before access is\n granted.\n </Typography>\n </Box>\n {createError && (\n <Box\n mb={2}\n p={2}\n bgcolor=\"error.main\"\n color=\"error.contrastText\"\n borderRadius={1}\n >\n <Typography variant=\"body2\">{createError}</Typography>\n </Box>\n )}\n <FormControl\n fullWidth\n margin=\"normal\"\n disabled={creating}\n data-testid=\"tier-select-form\"\n >\n <InputLabel id=\"tier-select-label\">Select Tier</InputLabel>\n <Select\n labelId=\"tier-select-label\"\n data-testid=\"tier-select\"\n value={selectedPlan}\n onChange={(e) => setSelectedPlan(e.target.value as string)}\n disabled={creating}\n >\n {plans.map((plan: Plan) => {\n const limitDesc = Object.entries(plan.limits || {})\n .map(([key, val]) => `${val} per ${key}`)\n .join(', ');\n return (\n <MenuItem\n key={plan.tier}\n value={plan.tier}\n data-testid={`tier-option-${plan.tier}`}\n >\n {plan.tier} {limitDesc ? `(${limitDesc})` : ''}\n </MenuItem>\n );\n })}\n </Select>\n </FormControl>\n <TextField\n label=\"Use Case (optional)\"\n placeholder=\"Describe how you plan to use this API\"\n multiline\n rows={3}\n fullWidth\n margin=\"normal\"\n value={useCase}\n onChange={(e) => setUseCase(e.target.value)}\n helperText=\"Explain your intended use of this API for admin review\"\n disabled={creating}\n />\n </DialogContent>\n <DialogActions>\n <Button onClick={handleClose} disabled={creating}>\n Cancel\n </Button>\n <Button\n onClick={handleRequestAccess}\n color=\"primary\"\n variant=\"contained\"\n disabled={!selectedPlan || creating}\n startIcon={\n creating ? (\n <CircularProgress size={16} color=\"inherit\" />\n ) : undefined\n }\n >\n {creating ? 'Submitting...' : 'Submit Request'}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n","import { StatusCondition } from '../types/api-management';\n\n/**\n * Derives the APIKey approval phase from Kubernetes conditions.\n *\n * Maps conditions to phases:\n * - Empty conditions array → Pending\n * - Approved condition (status: True) → Approved\n * - Denied condition (status: True) → Denied\n * - Failed condition (status: True) → Failed\n *\n * @param conditions - Array of Kubernetes status conditions\n * @returns Current approval phase\n */\nexport function getAPIKeyPhase(\n conditions?: StatusCondition[]\n): 'Pending' | 'Approved' | 'Denied' | 'Failed' {\n if (!conditions || conditions.length === 0) {\n return 'Pending';\n }\n\n const approved = conditions.find(\n c => c.type === 'Approved' && c.status === 'True'\n );\n if (approved) return 'Approved';\n\n const denied = conditions.find(\n c => c.type === 'Denied' && c.status === 'True'\n );\n if (denied) return 'Denied';\n\n const failed = conditions.find(\n c => c.type === 'Failed' && c.status === 'True'\n );\n if (failed) return 'Failed';\n\n return 'Pending';\n}\n","import { createApiRef } from '@backstage/core-plugin-api';\n\nconst catalogApiRef = createApiRef({\n id: \"plugin.catalog.service\"\n});\n\nexport { catalogApiRef };\n//# sourceMappingURL=api.esm.js.map\n"],"names":["_interopRequireDefault","__webpack_require__","_interopRequireWildcard","exports","A","React","_default","default","createElement","d","EditAPIKeyDialog","open","onClose","onSuccess","request","availablePlans","kuadrantApi","useApi","kuadrantApiRef","planTier","setPlanTier","useState","useCase","setUseCase","saving","setSaving","error","setError","useEffect","spec","handleClose","jsx_runtime","jsxs","Dialog","maxWidth","fullWidth","jsx","DialogTitle","DialogContent","Box","mb","p","bgcolor","color","borderRadius","Typography","variant","FormControl","margin","InputLabel","Select","value","onChange","e","target","disabled","map","plan","limitDesc","Object","entries","limits","key","val","join","MenuItem","tier","TextField","label","placeholder","multiline","rows","helperText","DialogActions","Button","onClick","async","patch","trim","updateRequest","metadata","name","namespace","err","console","Error","message","startIcon","CircularProgress","size","undefined","generateAuthorizationHeaderSnippets","baseUrl","apiKey","prefix","prefixWithSpace","curl","nodejs","python","go","ApiKeyManagementTab","propNamespace","entity","apiProduct","deleteDialogState","useEntity","catalogAPI","catalogApiRef","identityApi","identityApiRef","alertApi","alertApiRef","visibleKeys","setVisibleKeys","Set","refresh","setRefresh","userId","setUserId","userEmail","setUserEmail","requestDialogOpen","setRequestDialogOpen","editDialogOpen","setEditDialogOpen","requestToEdit","setRequestToEdit","menuAnchor","setMenuAnchor","menuRequest","setMenuRequest","deleting","setDeleting","optimisticallyDeleted","setOptimisticallyDeleted","setDeleteDialogState","apiKeyValues","setApiKeyValues","Map","apiKeyLoading","setApiKeyLoading","apiProductName","annotations","useAsync","identity","getBackstageIdentity","profile","getProfileInfo","userEntityRef","email","userEntity","getEntityByRef","requests","loading","requestsLoading","requestsError","getRequestsByApiProduct","items","plansLoading","plansError","data","getApiProducts","find","resourceRef","allowed","canCreateRequest","createRequestPermissionLoading","createRequestPermissionError","useKuadrantPermission","kuadrantApiKeyCreatePermission","canDeleteOwnKey","deleteOwnPermissionLoading","deleteOwnPermissionError","kuadrantApiKeyDeleteOwnPermission","canDeleteAllKeys","deleteAllPermissionLoading","deleteAllPermissionError","kuadrantApiKeyDeleteAllPermission","canUpdateRequest","updateRequestPermissionLoading","updateRequestPermissionError","kuadrantApiKeyUpdateOwnPermission","handleMenuClose","handleMenuEdit","handleMenuDeleteClick","toggleVisibility","keyName","prev","newSet","has","delete","add","detailPanelConfig","useMemo","render","rowData","revealedKey","get","DetailPanelContent","apiName","revealedApiKey","api","selectedLanguage","setSelectedLanguage","hostname","status","apiHostname","displayApiKey","snippets","credentials","authorizationHeader","customHeader","headerName","generateCustomHeaderSnippets","queryString","paramName","generateQueryStringSnippets","cookie","cookieName","generateCookieSnippets","generateAuthCodeSnippets","authScheme","stopPropagation","gutterBottom","border","style","whiteSpace","wordBreak","overflowWrap","paragraph","Tabs","newValue","indicatorColor","Tab","mt","CodeSnippet","text","language","showCopyCodeButton","permissionError","Array","_","i","Skeleton","width","ResponseErrorPanel","failedPermission","myRequests","filter","r","plans","discoveredPlans","pendingRequests","getAPIKeyPhase","conditions","approvedRequests","rejectedRequests","approvedColumns","title","field","row","Chip","approvalDate","c","type","lastTransitionTime","Date","toLocaleDateString","searchable","filtering","isVisible","isLoading","apiKeyValue","Boolean","secretRef","display","alignItems","fontFamily","marginRight","Tooltip","IconButton","navigator","clipboard","writeText","post","severity","FileCopyIcon","fontSize","span","requestNamespace","requestName","next","clearApiKeyValue","getApiKeySecret","set","errorMessage","fetchApiKeyFromSecret","VisibilityOffIcon","VisibilityIcon","ownerId","requestedBy","canDeleteResource","rect","currentTarget","getBoundingClientRect","top","bottom","left","aria-controls","aria-haspopup","MoreVertIcon","requestColumns","phase","isPending","icon","HourglassEmptyIcon","CancelIcon","placement","overflow","textOverflow","creationTimestamp","approvedDate","canDelete","pendingRequestColumns","col","Grid","container","spacing","direction","item","flexDirection","AddIcon","length","data-testid","data-plans-count","marginTop","readyCondition","planCondition","textAlign","Table","options","paging","pageSize","search","debounceInterval","toolbar","emptyRowsWhenPaging","columns","detailPanel","RequestAccessDialog","Menu","id","anchorReference","anchorPosition","push","ConfirmDeleteDialog","description","onConfirm","deleteNamespace","deleteName","deleteRequest","handleDeleteRequest","onCancel","confirmText","inputValue","setInputValue","requiresTextConfirmation","canConfirm","react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__","gap","WarningIcon","DialogContentText","strong","autoFocus","selectedPlan","setSelectedPlan","creating","setCreating","createError","setCreateError","InfoIcon","labelId","randomSuffix","Math","random","toString","substring","secretName","toLowerCase","replace","crypto","randomUUID","createSecret","createRequest","apiKeyError","deleteSecret","deleteError","warn","createApiRef"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunkkuadrant_kuadrant_backstage_plugin_frontend=self.webpackChunkkuadrant_kuadrant_backstage_plugin_frontend||[]).push([[2769],{18466:(e,t,n)=>{var r=n(4293),a=n(78920);t.A=void 0;var o=a(n(95478)),i=(0,r(n(74044)).default)(o.createElement("path",{d:"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"}),"Add");t.A=i},55735:(e,t,n)=>{var r=n(4293),a=n(78920);t.A=void 0;var o=a(n(95478)),i=(0,r(n(74044)).default)(o.createElement("path",{d:"M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z"}),"ArrowBack");t.A=i},52235:(e,t,n)=>{var r=n(4293),a=n(78920);t.A=void 0;var o=a(n(95478)),i=(0,r(n(74044)).default)(o.createElement("path",{d:"M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z"}),"ArrowForward");t.A=i},39590:(e,t,n)=>{var r=n(4293),a=n(78920);t.A=void 0;var o=a(n(95478)),i=(0,r(n(74044)).default)(o.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=i},89031:(e,t,n)=>{var r=n(4293),a=n(78920);t.A=void 0;var o=a(n(95478)),i=(0,r(n(74044)).default)(o.createElement("path",{d:"M11 7h2v2h-2zm0 4h2v6h-2zm1-9C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"}),"InfoOutlined");t.A=i},77225:(e,t,n)=>{var r=n(4293),a=n(78920);t.A=void 0;var o=a(n(95478)),i=(0,r(n(74044)).default)(o.createElement("path",{d:"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z"}),"Warning");t.A=i},48351:(e,t,n)=>{n.d(t,{A:()=>y});var r=n(39850),a=n(89575),o=n(95478),i=n(57384),l=n(37976),s=n(4321),c=n(38483);const d=(0,c.A)(o.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,c.A)(o.createElement("path",{d:"M12 5.99L19.53 19H4.47L12 5.99M12 2L1 21h22L12 2zm1 14h-2v2h2v-2zm0-6h-2v4h2v-4z"}),"ReportProblemOutlined"),h=(0,c.A)(o.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"),p=(0,c.A)(o.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,c.A)(o.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 m=n(29365),g=n(11192),v={success:o.createElement(d,{fontSize:"inherit"}),warning:o.createElement(u,{fontSize:"inherit"}),error:o.createElement(h,{fontSize:"inherit"}),info:o.createElement(p,{fontSize:"inherit"})},A=o.createElement(f,{fontSize:"small"}),x=o.forwardRef(function(e,t){var n=e.action,l=e.children,c=e.classes,d=e.className,u=e.closeText,h=void 0===u?"Close":u,p=e.color,f=e.icon,x=e.iconMapping,y=void 0===x?v:x,C=e.onClose,b=e.role,k=void 0===b?"alert":b,j=e.severity,E=void 0===j?"success":j,S=e.variant,M=void 0===S?"standard":S,z=(0,r.A)(e,["action","children","classes","className","closeText","color","icon","iconMapping","onClose","role","severity","variant"]);return o.createElement(s.A,(0,a.A)({role:k,square:!0,elevation:0,className:(0,i.A)(c.root,c["".concat(M).concat((0,g.A)(p||E))],d),ref:t},z),!1!==f?o.createElement("div",{className:c.icon},f||y[E]||v[E]):null,o.createElement("div",{className:c.message},l),null!=n?o.createElement("div",{className:c.action},n):null,null==n&&C?o.createElement("div",{className:c.action},o.createElement(m.A,{size:"small","aria-label":h,title:h,color:"inherit",onClick:C},A)):null)});const y=(0,l.withStyles)(function(e){var t="light"===e.palette.type?l.darken:l.lighten,n="light"===e.palette.type?l.lighten:l.darken;return{root:(0,a.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"})(x)},35015:(e,t,n)=>{n.d(t,{A:()=>i});var r=n(95478),a=n(85608),o=n(71581);function i(e,t){void 0===t&&(t=[]);var n=function(e,t,n){void 0===t&&(t=[]),void 0===n&&(n={loading:!1});var i=(0,r.useRef)(0),l=(0,o.A)(),s=(0,r.useState)(n),c=s[0],d=s[1],u=(0,r.useCallback)(function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];var r=++i.current;return c.loading||d(function(e){return(0,a.__assign)((0,a.__assign)({},e),{loading:!0})}),e.apply(void 0,t).then(function(e){return l()&&r===i.current&&d({value:e,loading:!1}),e},function(e){return l()&&r===i.current&&d({error:e,loading:!1}),e})},t);return[c,u]}(e,t,{loading:!0}),i=n[0],l=n[1];return(0,r.useEffect)(function(){l()},[l]),i}},91638:(e,t,n)=>{var r=n(85608),a=n(95478),o=r.__importDefault(n(5030));t.A=function(e,t){void 0===t&&(t=[]);var n=o.default(e,t,{loading:!0}),r=n[0],i=n[1];return a.useEffect(function(){i()},[i]),r}},5030:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0});var r=n(85608),a=n(95478),o=r.__importDefault(n(10009));t.default=function(e,t,n){void 0===t&&(t=[]),void 0===n&&(n={loading:!1});var i=a.useRef(0),l=o.default(),s=a.useState(n),c=s[0],d=s[1],u=a.useCallback(function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];var a=++i.current;return c.loading||d(function(e){return r.__assign(r.__assign({},e),{loading:!0})}),e.apply(void 0,t).then(function(e){return l()&&a===i.current&&d({value:e,loading:!1}),e},function(e){return l()&&a===i.current&&d({error:e,loading:!1}),e})},t);return[c,u]}},10009:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0});var r=n(95478);t.default=function(){var e=r.useRef(!1),t=r.useCallback(function(){return e.current},[]);return r.useEffect(function(){return e.current=!0,function(){e.current=!1}},[]),t}},96040:(e,t,n)=>{n.d(t,{n:()=>L});var r=n(31085),a=n(40703),o=n(59469),i=n(48653),l=n(45685),s=n(37197),c=n(37976),d=n(53373),u=n.n(d),h=n(10394),p=n(72501),f=n(52235),m=n(37725);const g=(0,c.makeStyles)(e=>({root:{maxWidth:"fit-content",padding:e.spacing(2,2,2,2.5)},boxTitle:{margin:0,color:e.palette.textSubtle},arrow:{color:e.palette.textSubtle}}),{name:"BackstageBottomLink"});function v(e){const{link:t,title:n,onClick:a}=e,o=g();return(0,r.jsxs)(h.A,{children:[(0,r.jsx)(s.A,{}),(0,r.jsx)(m.N_,{to:t,onClick:a,underline:"none",children:(0,r.jsxs)(h.A,{display:"flex",alignItems:"center",className:o.root,children:[(0,r.jsx)(h.A,{className:o.boxTitle,fontWeight:"fontWeightBold",m:1,children:(0,r.jsx)(p.A,{children:(0,r.jsx)("strong",{children:n})})}),(0,r.jsx)(f.A,{className:o.arrow})]})})]})}var A=n(95478),x=n(64947);const y=(0,A.forwardRef)((e,t)=>(0,r.jsx)(m.N_,{ref:t,...e,color:"initial"})),C=(0,A.forwardRef)((e,t)=>(0,r.jsx)(x.A,{ref:t,component:y,...e}));var b=n(34169),k=n(21006),j=n(67550);const E=e=>{const{slackChannel:t}=e,{t:n}=(0,j.i)(k.O);return t?"string"==typeof t?(0,r.jsx)(p.A,{children:n("errorBoundary.title",{slackChannel:t})}):t.href?(0,r.jsx)(C,{to:t.href,variant:"contained",children:t.name}):(0,r.jsx)(p.A,{children:n("errorBoundary.title",{slackChannel:t.name})}):null},S=class extends A.Component{constructor(e){super(e),this.state={error:void 0,errorInfo:void 0}}componentDidCatch(e,t){console.error(`ErrorBoundary, error: ${e}`,{error:e,errorInfo:t}),this.setState({error:e,errorInfo:t})}render(){const{slackChannel:e,children:t}=this.props,{error:n}=this.state;return n?(0,r.jsx)(b.b,{title:"Something Went Wrong",error:n,children:(0,r.jsx)(E,{slackChannel:e})}):t}},M=(0,c.makeStyles)(e=>({noPadding:{padding:0,"&:last-child":{paddingBottom:0}},contentAlignBottom:{display:"flex",alignItems:"self-end"},header:{padding:e.spacing(2,2,2,2.5)},headerTitle:{fontWeight:e.typography.fontWeightBold},headerSubheader:{paddingTop:e.spacing(1)},headerAvatar:{},headerAction:{},headerContent:{},subheader:{display:"flex"}}),{name:"BackstageInfoCard"}),z=(0,c.withStyles)(e=>({root:{display:"inline-block",padding:e.spacing(8,8,0,0),float:"right"}}),{name:"BackstageInfoCardCardActionsTopRight"})(o.A),_={card:{flex:{display:"flex",flexDirection:"column"},fullHeight:{display:"flex",flexDirection:"column",height:"100%"},gridItem:{display:"flex",flexDirection:"column",height:"calc(100% - 10px)",marginBottom:"10px",breakInside:"avoid-page","@media print":{height:"auto"}}},cardContent:{fullHeight:{flex:1},gridItem:{flex:1}}};function L(e){const{title:t,subheader:n,divider:c=!0,deepLink:d,slackChannel:h,errorBoundaryProps:p,variant:f,alignContent:m="normal",children:g,headerStyle:A,headerProps:x,icon:y,action:C,actionsClassName:b,actions:k,cardClassName:j,actionsTopRight:E,className:L,noPadding:w,titleTypographyProps:N,subheaderTypographyProps:W}=e,I=M();let T={},B={};f&&f.split(/[\s]+/g).forEach(e=>{T={...T,..._.card[e]},B={...B,..._.cardContent[e]}});const H=p||(h?{slackChannel:h}:{});return(0,r.jsx)(a.A,{style:T,className:L,children:(0,r.jsxs)(S,{...H,children:[t&&(0,r.jsx)(l.A,{classes:{root:u()(I.header),title:I.headerTitle,subheader:I.headerSubheader,avatar:I.headerAvatar,action:I.headerAction,content:I.headerContent},title:t,subheader:n||y?(0,r.jsxs)("div",{"data-testid":"info-card-subheader",children:[n&&(0,r.jsx)("div",{className:I.subheader,children:n}),y]}):null,action:C,style:{...A},titleTypographyProps:N,subheaderTypographyProps:W,...x}),E&&(0,r.jsx)(z,{children:E}),c&&(0,r.jsx)(s.A,{}),(0,r.jsx)(i.A,{className:u()(j,{[I.noPadding]:w,[I.contentAlignBottom]:"bottom"===m}),style:B,children:g}),k&&(0,r.jsx)(o.A,{className:b,children:k}),d&&(0,r.jsx)(v,{...d})]})})}},41241:(e,t,n)=>{n.d(t,{S:()=>d});var r=n(31085),a=n(10394),o=n(88951),i=n(37976),l=n(95478);function s(e){const t=(0,i.useTheme)(),[n,s]=(0,l.useState)(!1);return(0,l.useEffect)(()=>{const e=setTimeout(()=>s(!0),t.transitions.duration.short);return()=>clearTimeout(e)},[t.transitions.duration.short]),n?(0,r.jsx)(o.A,{...e,"data-testid":"progress"}):(0,r.jsx)(a.A,{display:"none","data-testid":"progress"})}const c=(0,l.lazy)(()=>Promise.all([n.e(8727),n.e(6766)]).then(n.bind(n,6766)).then(e=>({default:e.OpenApiDefinition}))),d=e=>{const t=e.supportedSubmitMethods?.map(e=>e.toLocaleLowerCase());return(0,r.jsx)(l.Suspense,{fallback:(0,r.jsx)(s,{}),children:(0,r.jsx)(c,{...e,supportedSubmitMethods:t})})}}}]);
|
|
2
|
+
//# sourceMappingURL=2769.3ab6acb7.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static/2769.3ab6acb7.chunk.js","mappings":"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","sources":["webpack://kuadrant.kuadrant-backstage-plugin-frontend/../node_modules/@material-ui/icons/Add.js","webpack://kuadrant.kuadrant-backstage-plugin-frontend/../node_modules/@material-ui/icons/ArrowBack.js","webpack://kuadrant.kuadrant-backstage-plugin-frontend/../node_modules/@material-ui/icons/ArrowForward.js","webpack://kuadrant.kuadrant-backstage-plugin-frontend/../node_modules/@material-ui/icons/Delete.js","webpack://kuadrant.kuadrant-backstage-plugin-frontend/../node_modules/@material-ui/icons/InfoOutlined.js","webpack://kuadrant.kuadrant-backstage-plugin-frontend/../node_modules/@material-ui/icons/Warning.js","webpack://kuadrant.kuadrant-backstage-plugin-frontend/../node_modules/@material-ui/lab/esm/internal/svg-icons/SuccessOutlined.js","webpack://kuadrant.kuadrant-backstage-plugin-frontend/../node_modules/@material-ui/lab/esm/internal/svg-icons/ReportProblemOutlined.js","webpack://kuadrant.kuadrant-backstage-plugin-frontend/../node_modules/@material-ui/lab/esm/internal/svg-icons/ErrorOutline.js","webpack://kuadrant.kuadrant-backstage-plugin-frontend/../node_modules/@material-ui/lab/esm/internal/svg-icons/InfoOutlined.js","webpack://kuadrant.kuadrant-backstage-plugin-frontend/../node_modules/@material-ui/lab/esm/internal/svg-icons/Close.js","webpack://kuadrant.kuadrant-backstage-plugin-frontend/../node_modules/@material-ui/lab/esm/Alert/Alert.js","webpack://kuadrant.kuadrant-backstage-plugin-frontend/../node_modules/react-use/esm/useAsync.js","webpack://kuadrant.kuadrant-backstage-plugin-frontend/../node_modules/react-use/esm/useAsyncFn.js","webpack://kuadrant.kuadrant-backstage-plugin-frontend/../node_modules/react-use/lib/useAsync.js","webpack://kuadrant.kuadrant-backstage-plugin-frontend/../node_modules/react-use/lib/useAsyncFn.js","webpack://kuadrant.kuadrant-backstage-plugin-frontend/../node_modules/react-use/lib/useMountedState.js","webpack://kuadrant.kuadrant-backstage-plugin-frontend/./node_modules/@backstage/core-components/dist/layout/BottomLink/BottomLink.esm.js","webpack://kuadrant.kuadrant-backstage-plugin-frontend/./node_modules/@backstage/core-components/dist/components/LinkButton/LinkButton.esm.js","webpack://kuadrant.kuadrant-backstage-plugin-frontend/./node_modules/@backstage/core-components/dist/layout/ErrorBoundary/ErrorBoundary.esm.js","webpack://kuadrant.kuadrant-backstage-plugin-frontend/./node_modules/@backstage/core-components/dist/layout/InfoCard/InfoCard.esm.js","webpack://kuadrant.kuadrant-backstage-plugin-frontend/./node_modules/@backstage/plugin-api-docs/node_modules/@backstage/core-components/dist/components/Progress/Progress.esm.js","webpack://kuadrant.kuadrant-backstage-plugin-frontend/./node_modules/@backstage/plugin-api-docs/dist/components/OpenApiDefinitionWidget/OpenApiDefinitionWidget.esm.js"],"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: \"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\"\n}), 'Add');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z\"\n}), 'ArrowBack');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z\"\n}), 'ArrowForward');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z\"\n}), 'Delete');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M11 7h2v2h-2zm0 4h2v6h-2zm1-9C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z\"\n}), 'InfoOutlined');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z\"\n}), 'Warning');\n\nexports.default = _default;","import * as React from 'react';\nimport { createSvgIcon } from '@material-ui/core/utils';\n/**\n * @ignore - internal component.\n */\n\nexport default createSvgIcon( /*#__PURE__*/React.createElement(\"path\", {\n 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\"\n}), 'SuccessOutlined');","import * as React from 'react';\nimport { createSvgIcon } from '@material-ui/core/utils';\n/**\n * @ignore - internal component.\n */\n\nexport default createSvgIcon( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 5.99L19.53 19H4.47L12 5.99M12 2L1 21h22L12 2zm1 14h-2v2h2v-2zm0-6h-2v4h2v-4z\"\n}), 'ReportProblemOutlined');","import * as React from 'react';\nimport { createSvgIcon } from '@material-ui/core/utils';\n/**\n * @ignore - internal component.\n */\n\nexport default createSvgIcon( /*#__PURE__*/React.createElement(\"path\", {\n 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\"\n}), 'ErrorOutline');","import * as React from 'react';\nimport { createSvgIcon } from '@material-ui/core/utils';\n/**\n * @ignore - internal component.\n */\n\nexport default createSvgIcon( /*#__PURE__*/React.createElement(\"path\", {\n 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\"\n}), 'InfoOutlined');","import * as React from 'react';\nimport { createSvgIcon } from '@material-ui/core/utils';\n/**\n * @ignore - internal component.\n */\n\nexport default createSvgIcon( /*#__PURE__*/React.createElement(\"path\", {\n 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\"\n}), 'Close');","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { withStyles, lighten, darken } from '@material-ui/core/styles';\nimport Paper from '@material-ui/core/Paper';\nimport SuccessOutlinedIcon from '../internal/svg-icons/SuccessOutlined';\nimport ReportProblemOutlinedIcon from '../internal/svg-icons/ReportProblemOutlined';\nimport ErrorOutlineIcon from '../internal/svg-icons/ErrorOutline';\nimport InfoOutlinedIcon from '../internal/svg-icons/InfoOutlined';\nimport CloseIcon from '../internal/svg-icons/Close';\nimport IconButton from '@material-ui/core/IconButton';\nimport { capitalize } from '@material-ui/core/utils';\nexport var styles = function styles(theme) {\n var getColor = theme.palette.type === 'light' ? darken : lighten;\n var getBackgroundColor = theme.palette.type === 'light' ? lighten : darken;\n return {\n /* Styles applied to the root element. */\n root: _extends({}, theme.typography.body2, {\n borderRadius: theme.shape.borderRadius,\n backgroundColor: 'transparent',\n display: 'flex',\n padding: '6px 16px'\n }),\n\n /* Styles applied to the root element if `variant=\"standard\"` and `color=\"success\"`. */\n standardSuccess: {\n color: getColor(theme.palette.success.main, 0.6),\n backgroundColor: getBackgroundColor(theme.palette.success.main, 0.9),\n '& $icon': {\n color: theme.palette.success.main\n }\n },\n\n /* Styles applied to the root element if `variant=\"standard\"` and `color=\"info\"`. */\n standardInfo: {\n color: getColor(theme.palette.info.main, 0.6),\n backgroundColor: getBackgroundColor(theme.palette.info.main, 0.9),\n '& $icon': {\n color: theme.palette.info.main\n }\n },\n\n /* Styles applied to the root element if `variant=\"standard\"` and `color=\"warning\"`. */\n standardWarning: {\n color: getColor(theme.palette.warning.main, 0.6),\n backgroundColor: getBackgroundColor(theme.palette.warning.main, 0.9),\n '& $icon': {\n color: theme.palette.warning.main\n }\n },\n\n /* Styles applied to the root element if `variant=\"standard\"` and `color=\"error\"`. */\n standardError: {\n color: getColor(theme.palette.error.main, 0.6),\n backgroundColor: getBackgroundColor(theme.palette.error.main, 0.9),\n '& $icon': {\n color: theme.palette.error.main\n }\n },\n\n /* Styles applied to the root element if `variant=\"outlined\"` and `color=\"success\"`. */\n outlinedSuccess: {\n color: getColor(theme.palette.success.main, 0.6),\n border: \"1px solid \".concat(theme.palette.success.main),\n '& $icon': {\n color: theme.palette.success.main\n }\n },\n\n /* Styles applied to the root element if `variant=\"outlined\"` and `color=\"info\"`. */\n outlinedInfo: {\n color: getColor(theme.palette.info.main, 0.6),\n border: \"1px solid \".concat(theme.palette.info.main),\n '& $icon': {\n color: theme.palette.info.main\n }\n },\n\n /* Styles applied to the root element if `variant=\"outlined\"` and `color=\"warning\"`. */\n outlinedWarning: {\n color: getColor(theme.palette.warning.main, 0.6),\n border: \"1px solid \".concat(theme.palette.warning.main),\n '& $icon': {\n color: theme.palette.warning.main\n }\n },\n\n /* Styles applied to the root element if `variant=\"outlined\"` and `color=\"error\"`. */\n outlinedError: {\n color: getColor(theme.palette.error.main, 0.6),\n border: \"1px solid \".concat(theme.palette.error.main),\n '& $icon': {\n color: theme.palette.error.main\n }\n },\n\n /* Styles applied to the root element if `variant=\"filled\"` and `color=\"success\"`. */\n filledSuccess: {\n color: '#fff',\n fontWeight: theme.typography.fontWeightMedium,\n backgroundColor: theme.palette.success.main\n },\n\n /* Styles applied to the root element if `variant=\"filled\"` and `color=\"info\"`. */\n filledInfo: {\n color: '#fff',\n fontWeight: theme.typography.fontWeightMedium,\n backgroundColor: theme.palette.info.main\n },\n\n /* Styles applied to the root element if `variant=\"filled\"` and `color=\"warning\"`. */\n filledWarning: {\n color: '#fff',\n fontWeight: theme.typography.fontWeightMedium,\n backgroundColor: theme.palette.warning.main\n },\n\n /* Styles applied to the root element if `variant=\"filled\"` and `color=\"error\"`. */\n filledError: {\n color: '#fff',\n fontWeight: theme.typography.fontWeightMedium,\n backgroundColor: theme.palette.error.main\n },\n\n /* Styles applied to the icon wrapper element. */\n icon: {\n marginRight: 12,\n padding: '7px 0',\n display: 'flex',\n fontSize: 22,\n opacity: 0.9\n },\n\n /* Styles applied to the message wrapper element. */\n message: {\n padding: '8px 0'\n },\n\n /* Styles applied to the action wrapper element if `action` is provided. */\n action: {\n display: 'flex',\n alignItems: 'center',\n marginLeft: 'auto',\n paddingLeft: 16,\n marginRight: -8\n }\n };\n};\nvar defaultIconMapping = {\n success: /*#__PURE__*/React.createElement(SuccessOutlinedIcon, {\n fontSize: \"inherit\"\n }),\n warning: /*#__PURE__*/React.createElement(ReportProblemOutlinedIcon, {\n fontSize: \"inherit\"\n }),\n error: /*#__PURE__*/React.createElement(ErrorOutlineIcon, {\n fontSize: \"inherit\"\n }),\n info: /*#__PURE__*/React.createElement(InfoOutlinedIcon, {\n fontSize: \"inherit\"\n })\n};\n\nvar _ref = /*#__PURE__*/React.createElement(CloseIcon, {\n fontSize: \"small\"\n});\n\nvar Alert = /*#__PURE__*/React.forwardRef(function Alert(props, ref) {\n var action = props.action,\n children = props.children,\n classes = props.classes,\n className = props.className,\n _props$closeText = props.closeText,\n closeText = _props$closeText === void 0 ? 'Close' : _props$closeText,\n color = props.color,\n icon = props.icon,\n _props$iconMapping = props.iconMapping,\n iconMapping = _props$iconMapping === void 0 ? defaultIconMapping : _props$iconMapping,\n onClose = props.onClose,\n _props$role = props.role,\n role = _props$role === void 0 ? 'alert' : _props$role,\n _props$severity = props.severity,\n severity = _props$severity === void 0 ? 'success' : _props$severity,\n _props$variant = props.variant,\n variant = _props$variant === void 0 ? 'standard' : _props$variant,\n other = _objectWithoutProperties(props, [\"action\", \"children\", \"classes\", \"className\", \"closeText\", \"color\", \"icon\", \"iconMapping\", \"onClose\", \"role\", \"severity\", \"variant\"]);\n\n return /*#__PURE__*/React.createElement(Paper, _extends({\n role: role,\n square: true,\n elevation: 0,\n className: clsx(classes.root, classes[\"\".concat(variant).concat(capitalize(color || severity))], className),\n ref: ref\n }, other), icon !== false ? /*#__PURE__*/React.createElement(\"div\", {\n className: classes.icon\n }, icon || iconMapping[severity] || defaultIconMapping[severity]) : null, /*#__PURE__*/React.createElement(\"div\", {\n className: classes.message\n }, children), action != null ? /*#__PURE__*/React.createElement(\"div\", {\n className: classes.action\n }, action) : null, action == null && onClose ? /*#__PURE__*/React.createElement(\"div\", {\n className: classes.action\n }, /*#__PURE__*/React.createElement(IconButton, {\n size: \"small\",\n \"aria-label\": closeText,\n title: closeText,\n color: \"inherit\",\n onClick: onClose\n }, _ref)) : null);\n});\nprocess.env.NODE_ENV !== \"production\" ? Alert.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The action to display. It renders after the message, at the end of the alert.\n */\n action: PropTypes.node,\n\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * Override the default label for the *close popup* icon button.\n *\n * For localization purposes, you can use the provided [translations](/guides/localization/).\n */\n closeText: PropTypes.string,\n\n /**\n * The main color for the alert. Unless provided, the value is taken from the `severity` prop.\n */\n color: PropTypes.oneOf(['error', 'info', 'success', 'warning']),\n\n /**\n * Override the icon displayed before the children.\n * Unless provided, the icon is mapped to the value of the `severity` prop.\n */\n icon: PropTypes.node,\n\n /**\n * The component maps the `severity` prop to a range of different icons,\n * for instance success to `<SuccessOutlined>`.\n * If you wish to change this mapping, you can provide your own.\n * Alternatively, you can use the `icon` prop to override the icon displayed.\n */\n iconMapping: PropTypes.shape({\n error: PropTypes.node,\n info: PropTypes.node,\n success: PropTypes.node,\n warning: PropTypes.node\n }),\n\n /**\n * Callback fired when the component requests to be closed.\n * When provided and no `action` prop is set, a close icon button is displayed that triggers the callback when clicked.\n *\n * @param {object} event The event source of the callback.\n */\n onClose: PropTypes.func,\n\n /**\n * The ARIA role attribute of the element.\n */\n role: PropTypes.string,\n\n /**\n * The severity of the alert. This defines the color and icon used.\n */\n severity: PropTypes.oneOf(['error', 'info', 'success', 'warning']),\n\n /**\n * The variant to use.\n */\n variant: PropTypes.oneOf(['filled', 'outlined', 'standard'])\n} : void 0;\nexport default withStyles(styles, {\n name: 'MuiAlert'\n})(Alert);","import { useEffect } from 'react';\nimport useAsyncFn from './useAsyncFn';\nexport default function useAsync(fn, deps) {\n if (deps === void 0) { deps = []; }\n var _a = useAsyncFn(fn, deps, {\n loading: true,\n }), state = _a[0], callback = _a[1];\n useEffect(function () {\n callback();\n }, [callback]);\n return state;\n}\n","import { __assign } from \"tslib\";\nimport { useCallback, useRef, useState } from 'react';\nimport useMountedState from './useMountedState';\nexport default function useAsyncFn(fn, deps, initialState) {\n if (deps === void 0) { deps = []; }\n if (initialState === void 0) { initialState = { loading: false }; }\n var lastCallId = useRef(0);\n var isMounted = useMountedState();\n var _a = useState(initialState), state = _a[0], set = _a[1];\n var callback = useCallback(function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var callId = ++lastCallId.current;\n if (!state.loading) {\n set(function (prevState) { return (__assign(__assign({}, prevState), { loading: true })); });\n }\n return fn.apply(void 0, args).then(function (value) {\n isMounted() && callId === lastCallId.current && set({ value: value, loading: false });\n return value;\n }, function (error) {\n isMounted() && callId === lastCallId.current && set({ error: error, loading: false });\n return error;\n });\n }, deps);\n return [state, callback];\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar react_1 = require(\"react\");\nvar useAsyncFn_1 = tslib_1.__importDefault(require(\"./useAsyncFn\"));\nfunction useAsync(fn, deps) {\n if (deps === void 0) { deps = []; }\n var _a = useAsyncFn_1.default(fn, deps, {\n loading: true,\n }), state = _a[0], callback = _a[1];\n react_1.useEffect(function () {\n callback();\n }, [callback]);\n return state;\n}\nexports.default = useAsync;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar react_1 = require(\"react\");\nvar useMountedState_1 = tslib_1.__importDefault(require(\"./useMountedState\"));\nfunction useAsyncFn(fn, deps, initialState) {\n if (deps === void 0) { deps = []; }\n if (initialState === void 0) { initialState = { loading: false }; }\n var lastCallId = react_1.useRef(0);\n var isMounted = useMountedState_1.default();\n var _a = react_1.useState(initialState), state = _a[0], set = _a[1];\n var callback = react_1.useCallback(function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var callId = ++lastCallId.current;\n if (!state.loading) {\n set(function (prevState) { return (tslib_1.__assign(tslib_1.__assign({}, prevState), { loading: true })); });\n }\n return fn.apply(void 0, args).then(function (value) {\n isMounted() && callId === lastCallId.current && set({ value: value, loading: false });\n return value;\n }, function (error) {\n isMounted() && callId === lastCallId.current && set({ error: error, loading: false });\n return error;\n });\n }, deps);\n return [state, callback];\n}\nexports.default = useAsyncFn;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = require(\"react\");\nfunction useMountedState() {\n var mountedRef = react_1.useRef(false);\n var get = react_1.useCallback(function () { return mountedRef.current; }, []);\n react_1.useEffect(function () {\n mountedRef.current = true;\n return function () {\n mountedRef.current = false;\n };\n }, []);\n return get;\n}\nexports.default = useMountedState;\n","import { jsxs, jsx } from 'react/jsx-runtime';\nimport Box from '@material-ui/core/Box';\nimport Divider from '@material-ui/core/Divider';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport ArrowIcon from '@material-ui/icons/ArrowForward';\nimport { Link } from '../../components/Link/Link.esm.js';\n\nconst useStyles = makeStyles(\n (theme) => ({\n root: {\n maxWidth: \"fit-content\",\n padding: theme.spacing(2, 2, 2, 2.5)\n },\n boxTitle: {\n margin: 0,\n color: theme.palette.textSubtle\n },\n arrow: {\n color: theme.palette.textSubtle\n }\n }),\n { name: \"BackstageBottomLink\" }\n);\nfunction BottomLink(props) {\n const { link, title, onClick } = props;\n const classes = useStyles();\n return /* @__PURE__ */ jsxs(Box, { children: [\n /* @__PURE__ */ jsx(Divider, {}),\n /* @__PURE__ */ jsx(Link, { to: link, onClick, underline: \"none\", children: /* @__PURE__ */ jsxs(Box, { display: \"flex\", alignItems: \"center\", className: classes.root, children: [\n /* @__PURE__ */ jsx(Box, { className: classes.boxTitle, fontWeight: \"fontWeightBold\", m: 1, children: /* @__PURE__ */ jsx(Typography, { children: /* @__PURE__ */ jsx(\"strong\", { children: title }) }) }),\n /* @__PURE__ */ jsx(ArrowIcon, { className: classes.arrow })\n ] }) })\n ] });\n}\n\nexport { BottomLink };\n//# sourceMappingURL=BottomLink.esm.js.map\n","import { jsx } from 'react/jsx-runtime';\nimport Button$1 from '@material-ui/core/Button';\nimport { forwardRef } from 'react';\nimport { Link } from '../Link/Link.esm.js';\n\nconst LinkWrapper = forwardRef((props, ref) => /* @__PURE__ */ jsx(Link, { ref, ...props, color: \"initial\" }));\nconst LinkButton = forwardRef((props, ref) => /* @__PURE__ */ jsx(Button$1, { ref, component: LinkWrapper, ...props }));\nconst Button = LinkButton;\n\nexport { Button, LinkButton };\n//# sourceMappingURL=LinkButton.esm.js.map\n","import { jsx } from 'react/jsx-runtime';\nimport Typography from '@material-ui/core/Typography';\nimport { Component } from 'react';\nimport { LinkButton } from '../../components/LinkButton/LinkButton.esm.js';\nimport { ErrorPanel } from '../../components/ErrorPanel/ErrorPanel.esm.js';\nimport { coreComponentsTranslationRef } from '../../translation.esm.js';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nconst SlackLink = (props) => {\n const { slackChannel } = props;\n const { t } = useTranslationRef(coreComponentsTranslationRef);\n if (!slackChannel) {\n return null;\n } else if (typeof slackChannel === \"string\") {\n return /* @__PURE__ */ jsx(Typography, { children: t(\"errorBoundary.title\", { slackChannel }) });\n } else if (!slackChannel.href) {\n return /* @__PURE__ */ jsx(Typography, { children: t(\"errorBoundary.title\", {\n slackChannel: slackChannel.name\n }) });\n }\n return /* @__PURE__ */ jsx(LinkButton, { to: slackChannel.href, variant: \"contained\", children: slackChannel.name });\n};\nconst ErrorBoundary = class ErrorBoundary2 extends Component {\n constructor(props) {\n super(props);\n this.state = {\n error: void 0,\n errorInfo: void 0\n };\n }\n componentDidCatch(error, errorInfo) {\n console.error(`ErrorBoundary, error: ${error}`, { error, errorInfo });\n this.setState({ error, errorInfo });\n }\n render() {\n const { slackChannel, children } = this.props;\n const { error } = this.state;\n if (!error) {\n return children;\n }\n return /* @__PURE__ */ jsx(ErrorPanel, { title: \"Something Went Wrong\", error, children: /* @__PURE__ */ jsx(SlackLink, { slackChannel }) });\n }\n};\n\nexport { ErrorBoundary };\n//# sourceMappingURL=ErrorBoundary.esm.js.map\n","import { jsx, jsxs } from 'react/jsx-runtime';\nimport Card from '@material-ui/core/Card';\nimport CardActions from '@material-ui/core/CardActions';\nimport CardContent from '@material-ui/core/CardContent';\nimport CardHeader from '@material-ui/core/CardHeader';\nimport Divider from '@material-ui/core/Divider';\nimport { makeStyles, withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport { BottomLink } from '../BottomLink/BottomLink.esm.js';\nimport { ErrorBoundary } from '../ErrorBoundary/ErrorBoundary.esm.js';\n\nconst useStyles = makeStyles(\n (theme) => ({\n noPadding: {\n padding: 0,\n \"&:last-child\": {\n paddingBottom: 0\n }\n },\n contentAlignBottom: {\n display: \"flex\",\n alignItems: \"self-end\"\n },\n header: {\n padding: theme.spacing(2, 2, 2, 2.5)\n },\n headerTitle: {\n fontWeight: theme.typography.fontWeightBold\n },\n headerSubheader: {\n paddingTop: theme.spacing(1)\n },\n headerAvatar: {},\n headerAction: {},\n headerContent: {},\n subheader: {\n display: \"flex\"\n }\n }),\n { name: \"BackstageInfoCard\" }\n);\nconst CardActionsTopRight = withStyles(\n (theme) => ({\n root: {\n display: \"inline-block\",\n padding: theme.spacing(8, 8, 0, 0),\n float: \"right\"\n }\n }),\n { name: \"BackstageInfoCardCardActionsTopRight\" }\n)(CardActions);\nconst VARIANT_STYLES = {\n card: {\n flex: {\n display: \"flex\",\n flexDirection: \"column\"\n },\n fullHeight: {\n display: \"flex\",\n flexDirection: \"column\",\n height: \"100%\"\n },\n gridItem: {\n display: \"flex\",\n flexDirection: \"column\",\n height: \"calc(100% - 10px)\",\n // for pages without content header\n marginBottom: \"10px\",\n breakInside: \"avoid-page\",\n \"@media print\": {\n height: \"auto\"\n }\n }\n },\n cardContent: {\n fullHeight: {\n flex: 1\n },\n gridItem: {\n flex: 1\n }\n }\n};\nfunction InfoCard(props) {\n const {\n title,\n subheader,\n divider = true,\n deepLink,\n slackChannel,\n errorBoundaryProps,\n variant,\n alignContent = \"normal\",\n children,\n headerStyle,\n headerProps,\n icon,\n action,\n actionsClassName,\n actions,\n cardClassName,\n actionsTopRight,\n className,\n noPadding,\n titleTypographyProps,\n subheaderTypographyProps\n } = props;\n const classes = useStyles();\n let calculatedStyle = {};\n let calculatedCardStyle = {};\n if (variant) {\n const variants = variant.split(/[\\s]+/g);\n variants.forEach((name) => {\n calculatedStyle = {\n ...calculatedStyle,\n ...VARIANT_STYLES.card[name]\n };\n calculatedCardStyle = {\n ...calculatedCardStyle,\n ...VARIANT_STYLES.cardContent[name]\n };\n });\n }\n const cardSubTitle = () => {\n if (!subheader && !icon) {\n return null;\n }\n return /* @__PURE__ */ jsxs(\"div\", { \"data-testid\": \"info-card-subheader\", children: [\n subheader && /* @__PURE__ */ jsx(\"div\", { className: classes.subheader, children: subheader }),\n icon\n ] });\n };\n const errProps = errorBoundaryProps || (slackChannel ? { slackChannel } : {});\n return /* @__PURE__ */ jsx(Card, { style: calculatedStyle, className, children: /* @__PURE__ */ jsxs(ErrorBoundary, { ...errProps, children: [\n title && /* @__PURE__ */ jsx(\n CardHeader,\n {\n classes: {\n root: classNames(classes.header),\n title: classes.headerTitle,\n subheader: classes.headerSubheader,\n avatar: classes.headerAvatar,\n action: classes.headerAction,\n content: classes.headerContent\n },\n title,\n subheader: cardSubTitle(),\n action,\n style: { ...headerStyle },\n titleTypographyProps,\n subheaderTypographyProps,\n ...headerProps\n }\n ),\n actionsTopRight && /* @__PURE__ */ jsx(CardActionsTopRight, { children: actionsTopRight }),\n divider && /* @__PURE__ */ jsx(Divider, {}),\n /* @__PURE__ */ jsx(\n CardContent,\n {\n className: classNames(cardClassName, {\n [classes.noPadding]: noPadding,\n [classes.contentAlignBottom]: alignContent === \"bottom\"\n }),\n style: calculatedCardStyle,\n children\n }\n ),\n actions && /* @__PURE__ */ jsx(CardActions, { className: actionsClassName, children: actions }),\n deepLink && /* @__PURE__ */ jsx(BottomLink, { ...deepLink })\n ] }) });\n}\n\nexport { InfoCard };\n//# sourceMappingURL=InfoCard.esm.js.map\n","import { jsx } from 'react/jsx-runtime';\nimport Box from '@material-ui/core/Box';\nimport LinearProgress from '@material-ui/core/LinearProgress';\nimport { useTheme } from '@material-ui/core/styles';\nimport { useState, useEffect } from 'react';\n\nfunction Progress(props) {\n const theme = useTheme();\n const [isVisible, setIsVisible] = useState(false);\n useEffect(() => {\n const handle = setTimeout(\n () => setIsVisible(true),\n theme.transitions.duration.short\n );\n return () => clearTimeout(handle);\n }, [theme.transitions.duration.short]);\n return isVisible ? /* @__PURE__ */ jsx(LinearProgress, { ...props, \"data-testid\": \"progress\" }) : /* @__PURE__ */ jsx(Box, { display: \"none\", \"data-testid\": \"progress\" });\n}\n\nexport { Progress };\n//# sourceMappingURL=Progress.esm.js.map\n","import { jsx } from 'react/jsx-runtime';\nimport { Progress } from '@backstage/core-components';\nimport { lazy, Suspense } from 'react';\n\nconst LazyOpenApiDefinition = lazy(\n () => import('./OpenApiDefinition.esm.js').then((m) => ({\n default: m.OpenApiDefinition\n }))\n);\nconst OpenApiDefinitionWidget = (props) => {\n const validSubmitMethods = props.supportedSubmitMethods?.map(\n (method) => method.toLocaleLowerCase()\n );\n return /* @__PURE__ */ jsx(Suspense, { fallback: /* @__PURE__ */ jsx(Progress, {}), children: /* @__PURE__ */ jsx(\n LazyOpenApiDefinition,\n {\n ...props,\n supportedSubmitMethods: validSubmitMethods\n }\n ) });\n};\n\nexport { OpenApiDefinitionWidget };\n//# sourceMappingURL=OpenApiDefinitionWidget.esm.js.map\n"],"names":["_interopRequireDefault","__webpack_require__","_interopRequireWildcard","exports","A","React","_default","default","createElement","d","SuccessOutlined","createSvgIcon","index_js_","ReportProblemOutlined","ErrorOutline","InfoOutlined","Close","defaultIconMapping","success","fontSize","warning","error","info","_ref","Alert","forwardRef","props","ref","action","children","classes","className","_props$closeText","closeText","color","icon","_props$iconMapping","iconMapping","onClose","_props$role","role","_props$severity","severity","_props$variant","variant","other","objectWithoutProperties","Paper","esm_extends","square","elevation","clsx_m","root","concat","capitalize","message","IconButton","size","title","onClick","Alert_Alert","styles_index_js_","withStyles","theme","getColor","palette","type","darken","lighten","getBackgroundColor","typography","body2","borderRadius","shape","backgroundColor","display","padding","standardSuccess","main","standardInfo","standardWarning","standardError","outlinedSuccess","border","outlinedInfo","outlinedWarning","outlinedError","filledSuccess","fontWeight","fontWeightMedium","filledInfo","filledWarning","filledError","marginRight","opacity","alignItems","marginLeft","paddingLeft","name","useAsync","fn","deps","_a","initialState","loading","lastCallId","useRef","isMounted","useMountedState","useState","state","set","callback","useCallback","args","_i","arguments","length","callId","current","prevState","tslib_es6","__assign","apply","then","value","useAsyncFn","useEffect","tslib_1","react_1","useAsyncFn_1","__importDefault","Object","defineProperty","useMountedState_1","mountedRef","get","useStyles","makeStyles","maxWidth","spacing","boxTitle","margin","textSubtle","arrow","BottomLink","link","jsx_runtime","jsxs","Box","jsx","Divider","Link_esm","N_","to","underline","m","Typography","ArrowForward","LinkWrapper","react_index_js_","LinkButton","Button","component","SlackLink","slackChannel","t","useTranslationRef_esm","i","translation_esm","O","href","ErrorBoundary","Component","constructor","super","this","errorInfo","componentDidCatch","console","setState","render","ErrorPanel_esm","b","InfoCard_esm_useStyles","noPadding","paddingBottom","contentAlignBottom","header","headerTitle","fontWeightBold","headerSubheader","paddingTop","headerAvatar","headerAction","headerContent","subheader","CardActionsTopRight","float","CardActions","VARIANT_STYLES","card","flex","flexDirection","fullHeight","height","gridItem","marginBottom","breakInside","cardContent","InfoCard","divider","deepLink","errorBoundaryProps","alignContent","headerStyle","headerProps","actionsClassName","actions","cardClassName","actionsTopRight","titleTypographyProps","subheaderTypographyProps","calculatedStyle","calculatedCardStyle","split","forEach","errProps","Card","style","CardHeader","classnames_default","avatar","content","CardContent","Progress","useTheme","isVisible","setIsVisible","handle","setTimeout","transitions","duration","short","clearTimeout","LinearProgress","LazyOpenApiDefinition","lazy","Promise","all","e","bind","OpenApiDefinition","OpenApiDefinitionWidget","validSubmitMethods","supportedSubmitMethods","map","method","toLocaleLowerCase","Suspense","fallback"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunkkuadrant_kuadrant_backstage_plugin_frontend=self.webpackChunkkuadrant_kuadrant_backstage_plugin_frontend||[]).push([[2821],{12229:(e,t,a)=>{a.d(t,{Z:()=>g});var s=a(31085),n=a(95478),l=a.n(n),i=a(58837),r=a(10394),o=a(72501),c=a(64947),d=a(37197),u=a(69621),p=a(12981),m=a(86901),h=a(69076),v=a(6924),x=a(23164);const A=(0,i.A)(e=>({root:{width:240,minWidth:240,padding:e.spacing(2),borderRight:`1px solid ${e.palette.divider}`,backgroundColor:e.palette.background.paper,height:"100%",overflowY:"auto"},sectionTitle:{fontWeight:600,fontSize:"0.75rem",textTransform:"uppercase",letterSpacing:"0.05em",color:e.palette.text.secondary,marginBottom:e.spacing(1),display:"flex",alignItems:"center",justifyContent:"space-between",cursor:"pointer",userSelect:"none"},filterSection:{marginBottom:e.spacing(2)},checkbox:{padding:e.spacing(.5)},checkboxLabel:{fontSize:"0.875rem"},clearButton:{marginTop:e.spacing(2)},count:{fontSize:"0.75rem",color:e.palette.text.secondary,marginLeft:e.spacing(1)}})),g=({sections:e,filters:t,onChange:a,onClear:n})=>{const i=A(),[g,y]=l().useState(new Set(e.filter(e=>e.collapsed).map(e=>e.id))),f=Object.values(t).some(e=>e.length>0);return(0,s.jsxs)(r.A,{className:i.root,children:[(0,s.jsxs)(r.A,{display:"flex",justifyContent:"space-between",alignItems:"center",mb:2,children:[(0,s.jsx)(o.A,{variant:"subtitle2",children:"Filters"}),f&&(0,s.jsx)(c.A,{size:"small",color:"primary",onClick:()=>{const t={};e.forEach(e=>{t[e.id]=[]}),a(t),null==n||n()},children:"Clear all"})]}),(0,s.jsx)(d.A,{}),e.map(e=>{const n=g.has(e.id),l=(t[e.id]||[]).length;return(0,s.jsxs)(r.A,{className:i.filterSection,mt:2,children:[(0,s.jsxs)(r.A,{className:i.sectionTitle,onClick:()=>{return t=e.id,void y(e=>{const a=new Set(e);return a.has(t)?a.delete(t):a.add(t),a});var t},children:[(0,s.jsxs)(r.A,{display:"flex",alignItems:"center",children:[(0,s.jsx)("span",{children:e.title}),l>0&&(0,s.jsxs)("span",{className:i.count,children:["(",l,")"]})]}),n?(0,s.jsx)(v.A,{fontSize:"small"}):(0,s.jsx)(x.A,{fontSize:"small"})]}),(0,s.jsx)(u.A,{in:!n,children:(0,s.jsx)(p.A,{children:e.options.map(n=>(0,s.jsx)(m.A,{control:(0,s.jsx)(h.A,{checked:(t[e.id]||[]).includes(n.value),onChange:()=>((e,s)=>{const n=t[e]||[],l=n.includes(s)?n.filter(e=>e!==s):[...n,s];a({...t,[e]:l})})(e.id,n.value),size:"small",className:i.checkbox,color:"primary"}),label:(0,s.jsxs)(r.A,{display:"flex",alignItems:"center",children:[(0,s.jsx)("span",{className:i.checkboxLabel,children:n.label}),void 0!==n.count&&(0,s.jsxs)("span",{className:i.count,children:["(",n.count,")"]})]})},n.value))})})]},e.id)})]})}},80243:(e,t,a)=>{a.r(t),a.d(t,{ApiProductsPage:()=>le});var s=a(31085),n=a(95478),l=a(58837),i=a(10394),r=a(67720),o=a(72501),c=a(64947),d=a(29365),u=a(4387),p=a(18466),m=a(39590),h=a(75625),v=a(21702),x=a(85142),A=a(12229),g=a(37725),y=a(289),f=a(15831),j=a(45210),b=a(46681),P=a(42367),S=a(25010),w=a(91638),C=a(22097),I=a(84692),k=a(70980),T=a(38599),N=a(76891),R=a(61477),z=a(46805),D=a(42899),L=a(16249),$=a(34839),M=a(71677),H=a(26343),W=a(95061),E=a(29635),K=a(86901),B=a(30285),q=a(93453),O=a(78467),F=a(89031),U=a(48351),_=a(86197),Y=a(24170),V=a(97859);const Z=(0,l.A)(e=>({asterisk:{color:"#f44336"},sectionHeader:{display:"flex",alignItems:"center",gap:e.spacing(.5),marginTop:e.spacing(2),marginBottom:e.spacing(1)},infoIcon:{fontSize:18,color:e.palette.text.secondary},tagChip:{marginRight:e.spacing(.5),marginBottom:e.spacing(.5)}})),G=({open:e,onClose:t,onSuccess:a})=>{var l,u,m,h,v,x;const A=Z(),g=(0,C.useApi)(k.s),[y,f]=(0,n.useState)(""),[j,b]=(0,n.useState)(""),[P,S]=(0,n.useState)(""),[I,T]=(0,n.useState)("v1"),[G,J]=(0,n.useState)("manual"),[X,Q]=(0,n.useState)("Published"),[ee,te]=(0,n.useState)("production"),[ae,se]=(0,n.useState)([]),[ne,le]=(0,n.useState)(""),[ie,re]=(0,n.useState)(""),[oe,ce]=(0,n.useState)(""),[de,ue]=(0,n.useState)(""),[pe,me]=(0,n.useState)(""),[he,ve]=(0,n.useState)(""),[xe,Ae]=(0,n.useState)(""),[ge,ye]=(0,n.useState)(!1),[fe,je]=(0,n.useState)(0),[be,Pe]=(0,n.useState)(null),[Se,we]=(0,n.useState)(null),[Ce,Ie]=(0,n.useState)(""),[ke,Te]=(0,n.useState)("name"),{value:Ne,loading:Re,error:ze}=(0,w.A)(async()=>(await g.getHttpRoutes()).items||[],[g,e,fe]),{value:De,error:Le}=(0,w.A)(async()=>await g.getPlanPolicies(),[g,e]),{value:$e,error:Me}=(0,w.A)(async()=>await g.getAuthPolicies(),[g,e]),{value:He,error:We}=(0,w.A)(async()=>await g.getRateLimitPolicies(),[g,e]),Ee=(e,t)=>(0,V.d)(null==De?void 0:De.items,e,t),Ke=ie?ie.split("/"):null,Be=Ke?Ee(Ke[0],Ke[1]):null,qe=null==Be||null===(u=Be.status)||void 0===u||null===(l=u.conditions)||void 0===l?void 0:l.find(e=>"Accepted"===e.type),Oe=Ke?(Fe=Ke[0],Ue=Ke[1],(0,V.d)(null==$e?void 0:$e.items,Fe,Ue)):null;var Fe,Ue;const _e=null==Oe||null===(h=Oe.status)||void 0===h||null===(m=h.conditions)||void 0===m?void 0:m.find(e=>"Accepted"===e.type),Ye=Ke?((e,t)=>(0,V.d)(null==He?void 0:He.items,e,t))(Ke[0],Ke[1]):null,Ve=null==Ye||null===(x=Ye.status)||void 0===x||null===(v=x.conditions)||void 0===v?void 0:v.find(e=>"Accepted"===e.type),Ze={statusCondition:qe,discoveredPlans:null==Be?void 0:Be.spec.plans},Ge={namespacedName:{namespace:null==Oe?void 0:Oe.metadata.namespace,name:null==Oe?void 0:Oe.metadata.name},statusCondition:_e},Je={namespacedName:{namespace:null==Ye?void 0:Ye.metadata.namespace,name:null==Ye?void 0:Ye.metadata.name},statusCondition:Ve},Xe=(e,t)=>{const a=Ee(e,t);return a?`${a.metadata.name}${(e=>{var t;if(!(null==e||null===(t=e.spec)||void 0===t?void 0:t.plans))return"";const a=Object.entries(e.spec.plans).map(([e,t])=>{var a;const s=null==t||null===(a=t.limits)||void 0===a?void 0:a.requests;return s?`${e}: ${s.count}/${s.period}`:e}).join("; ");return a?` (${a})`:""})(a)}`:"N/A"};(0,n.useEffect)(()=>{e&&(Pe(null),we(null))},[e]);const Qe=()=>{ne.trim()&&!ae.includes(ne.trim())&&(se([...ae,ne.trim()]),le(""))},et=()=>{f(""),b(""),S(""),T("v1"),J("manual"),Q("Published"),te("production"),se([]),le(""),re(""),ce(""),ue(""),me(""),ve(""),Ae(""),Pe(null),we(null),t()},tt=!!be||!!Se;return(0,s.jsxs)(N.A,{open:e,onClose:et,maxWidth:"md",fullWidth:!0,children:[(0,s.jsx)(R.A,{children:"Create API Product"}),(0,s.jsxs)(z.A,{children:[xe&&(0,s.jsx)(U.A,{severity:"error",style:{marginBottom:16},children:xe}),ze&&(0,s.jsxs)(U.A,{severity:"error",style:{marginBottom:16},children:[(0,s.jsx)("strong",{children:"Failed to load HTTPRoutes:"})," ",ze.message,(0,s.jsx)(i.A,{mt:1,children:(0,s.jsx)(c.A,{size:"small",variant:"outlined",onClick:()=>je(e=>e+1),children:"Retry"})})]}),Le&&(0,s.jsxs)(U.A,{severity:"warning",style:{marginBottom:16},children:[(0,s.jsx)("strong",{children:"Failed to load PlanPolicies:"})," ",Le.message,(0,s.jsx)(o.A,{variant:"body2",style:{marginTop:8},children:"You can still create the API Product, but plan information may be incomplete."})]}),Me&&(0,s.jsxs)(U.A,{severity:"warning",style:{marginBottom:16},children:[(0,s.jsx)("strong",{children:"Failed to load AuthPolicies:"})," ",Me.message]}),We&&(0,s.jsxs)(U.A,{severity:"warning",style:{marginBottom:16},children:[(0,s.jsx)("strong",{children:"Failed to load RateLimitPolicies:"})," ",We.message]}),(0,s.jsx)(i.A,{className:A.sectionHeader,children:(0,s.jsx)(o.A,{variant:"subtitle1",children:(0,s.jsx)("strong",{children:"API product info"})})}),(0,s.jsxs)(D.A,{container:!0,spacing:2,children:[(0,s.jsx)(D.A,{item:!0,xs:6,children:(0,s.jsx)(L.A,{fullWidth:!0,label:"API product name",value:j,onChange:e=>(e=>{if(b(e),!y||y.match(/-[a-f0-9]{6}$/)){const t=`${e.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"")}-${Math.floor(16777215*Math.random()).toString(16).padStart(6,"0")}`;f(t),Pe((0,Y.o)(t))}})(e.target.value),placeholder:"My API",helperText:"Display name for your API product (shown to users)",margin:"normal",required:!0,disabled:ge,InputLabelProps:{classes:{asterisk:A.asterisk}}})}),(0,s.jsx)(D.A,{item:!0,xs:6,children:(0,s.jsx)(L.A,{fullWidth:!0,label:"Kubernetes resource name",value:y,onChange:e=>{return t=e.target.value,f(t),void Pe((0,Y.o)(t));var t},placeholder:"my-api",helperText:be||"Auto-generated from product name. Only lowercase, numbers, and hyphens allowed.",error:!!be,margin:"normal",required:!0,disabled:ge,InputLabelProps:{classes:{asterisk:A.asterisk}}})}),(0,s.jsx)(D.A,{item:!0,xs:6,children:(0,s.jsx)(L.A,{fullWidth:!0,label:"Version",value:I,onChange:e=>T(e.target.value),placeholder:"v1",helperText:"Give a version to your API product",margin:"normal",required:!0,disabled:ge,InputLabelProps:{classes:{asterisk:A.asterisk}}})}),(0,s.jsx)(D.A,{item:!0,xs:6,children:(0,s.jsx)(L.A,{fullWidth:!0,label:"Tag",value:ne,onChange:e=>le(e.target.value),onKeyPress:e=>{"Enter"===e.key&&(e.preventDefault(),Qe())},placeholder:"Add tag",helperText:"Add a tag to your API product",margin:"normal",disabled:ge,InputProps:{endAdornment:ne?(0,s.jsx)($.A,{position:"end",children:(0,s.jsx)(d.A,{size:"small",onClick:Qe,disabled:ge,children:(0,s.jsx)(p.A,{fontSize:"small"})})}):void 0}})}),ae.length>0&&(0,s.jsx)(D.A,{item:!0,xs:12,children:(0,s.jsx)(i.A,{display:"flex",flexWrap:"wrap",children:ae.map(e=>(0,s.jsx)(r.A,{label:e,onDelete:ge?void 0:()=>{return t=e,void se(ae.filter(e=>e!==t));var t},size:"small",className:A.tagChip,disabled:ge},e))})}),(0,s.jsx)(D.A,{item:!0,xs:12,children:(0,s.jsx)(L.A,{fullWidth:!0,label:"Description",value:P,onChange:e=>S(e.target.value),placeholder:"API description",margin:"normal",multiline:!0,rows:2,required:!0,disabled:ge,InputLabelProps:{classes:{asterisk:A.asterisk}}})})]}),(0,s.jsxs)(i.A,{className:A.sectionHeader,children:[(0,s.jsx)(o.A,{variant:"subtitle1",children:(0,s.jsx)("strong",{children:"Add API and Associate route"})}),(0,s.jsx)(M.Ay,{title:"Register an existing API and associate HTTPRoute for your API product",children:(0,s.jsx)(F.A,{className:A.infoIcon})})]}),(0,s.jsxs)(D.A,{container:!0,spacing:2,children:[(0,s.jsx)(D.A,{item:!0,xs:12,children:(0,s.jsx)(L.A,{fullWidth:!0,label:"OpenAPI Spec URL",value:he,onChange:e=>{return t=e.target.value,ve(t),void we((0,Y.q)(t));var t},placeholder:"https://api.example.com/openapi.json",helperText:Se||"Enter the full path to your API spec file",error:!!Se,margin:"normal",disabled:ge})}),(0,s.jsx)(D.A,{item:!0,xs:12,children:(0,s.jsx)(L.A,{fullWidth:!0,label:"Documentation URL",value:pe,onChange:e=>me(e.target.value),placeholder:"https://docs.example.com/api",helperText:"Link to external documentation for this API",margin:"normal",disabled:ge})}),(0,s.jsx)(D.A,{item:!0,xs:12,children:(0,s.jsxs)(L.A,{fullWidth:!0,select:!0,label:"HTTPRoute",value:ie,onChange:e=>re(e.target.value),margin:"normal",required:!0,helperText:ze?"Unable to load HTTPRoutes. Please retry.":"Select an HTTPRoute. APIProduct will be created in the same namespace.",error:!!ze,disabled:Re||ge||!!ze,InputLabelProps:{classes:{asterisk:A.asterisk}},SelectProps:{"data-testid":"httproute-select",MenuProps:{PaperProps:{style:{maxHeight:400}},anchorOrigin:{vertical:"bottom",horizontal:"left"},transformOrigin:{vertical:"top",horizontal:"left"},getContentAnchorEl:null}},children:[(0,s.jsx)(i.A,{px:2,pt:1,pb:1,style:{position:"sticky",top:0,zIndex:1},children:(0,s.jsx)(L.A,{fullWidth:!0,size:"small",placeholder:"Search...",value:Ce,onChange:e=>Ie(e.target.value),onKeyDown:e=>e.stopPropagation(),onClick:e=>e.stopPropagation(),InputProps:{endAdornment:(0,s.jsx)($.A,{position:"end",children:(0,s.jsxs)(L.A,{select:!0,size:"small",value:ke,onChange:e=>Te(e.target.value),onKeyDown:e=>e.stopPropagation(),onClick:e=>e.stopPropagation(),style:{minWidth:120},variant:"standard",children:[(0,s.jsx)(H.A,{value:"name",children:"Name"}),(0,s.jsx)(H.A,{value:"namespace",children:"Namespace"}),(0,s.jsx)(H.A,{value:"planpolicy",children:"PlanPolicy"})]})})}})}),Re&&(0,s.jsx)(H.A,{value:"",children:"Loading..."}),ze&&(0,s.jsx)(H.A,{value:"",children:"Error loading routes"}),!Re&&!ze&&Ne&&0===Ne.length&&(0,s.jsx)(H.A,{value:"",children:"No HTTPRoutes available"}),!Re&&!ze&&Ne&&Ne.filter(e=>{if(!Ce)return!0;const t=e.metadata.namespace,a=e.metadata.name,s=Xe(t,a),n=Ce.toLowerCase();switch(ke){case"name":return a.toLowerCase().includes(n);case"namespace":return t.toLowerCase().includes(n);case"planpolicy":return s.toLowerCase().includes(n);default:return!0}}).map(e=>{const t=e.metadata.namespace,a=e.metadata.name,n=Xe(t,a);return(0,s.jsx)(H.A,{value:`${t}/${a}`,children:(0,s.jsxs)(i.A,{children:[(0,s.jsx)(o.A,{variant:"body1",children:a}),(0,s.jsxs)(o.A,{variant:"caption",color:"textSecondary",children:["Associated PlanPolicy: ",n]})]})},`${t}/${a}`)})]})})]}),ie&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(i.A,{className:A.sectionHeader,children:[(0,s.jsx)(o.A,{variant:"subtitle1",children:(0,s.jsx)("strong",{children:"HTTPRoute policies"})}),(0,s.jsx)(M.Ay,{title:"Shows the associated policies and rate limit tiers for the selected HTTPRoute",children:(0,s.jsx)(F.A,{className:A.infoIcon})})]}),(0,s.jsx)(_.K,{planPolicy:Ze,authPolicy:Ge,rateLimitPolicy:Je,includeTopMargin:!1})]}),(0,s.jsxs)(i.A,{className:A.sectionHeader,children:[(0,s.jsx)(o.A,{variant:"subtitle1",children:(0,s.jsx)("strong",{children:"Lifecycle and Visibility"})}),(0,s.jsx)(M.Ay,{title:"Control the lifecycle state and catalog visibility of this API product",children:(0,s.jsx)(F.A,{className:A.infoIcon})})]}),(0,s.jsxs)(D.A,{container:!0,spacing:2,children:[(0,s.jsx)(D.A,{item:!0,xs:6,children:(0,s.jsxs)(L.A,{fullWidth:!0,select:!0,label:"Lifecycle",value:ee,onChange:e=>te(e.target.value),margin:"normal",helperText:"API lifecycle state",disabled:ge,children:[(0,s.jsx)(H.A,{value:"experimental",children:"Experimental"}),(0,s.jsx)(H.A,{value:"production",children:"Production"}),(0,s.jsx)(H.A,{value:"deprecated",children:"Deprecated"}),(0,s.jsx)(H.A,{value:"retired",children:"Retired"})]})}),(0,s.jsx)(D.A,{item:!0,xs:6,children:(0,s.jsxs)(L.A,{fullWidth:!0,select:!0,label:"Publish Status",value:X,onChange:e=>Q(e.target.value),margin:"normal",helperText:"Controls catalog visibility (Draft = hidden from consumers)",disabled:ge,children:[(0,s.jsx)(H.A,{value:"Draft",children:"Draft"}),(0,s.jsx)(H.A,{value:"Published",children:"Published"})]})})]}),(0,s.jsxs)(i.A,{className:A.sectionHeader,children:[(0,s.jsx)(o.A,{variant:"subtitle1",children:(0,s.jsx)("strong",{children:"API Key approval"})}),(0,s.jsx)(M.Ay,{title:"Choose how API key requests are handled for this product",children:(0,s.jsx)(F.A,{className:A.infoIcon})})]}),(0,s.jsx)(W.A,{component:"fieldset",disabled:ge,children:(0,s.jsxs)(E.A,{row:!0,value:G,onChange:e=>J(e.target.value),children:[(0,s.jsx)(K.A,{value:"manual",control:(0,s.jsx)(B.A,{color:"primary"}),label:(0,s.jsxs)(i.A,{children:[(0,s.jsx)(o.A,{variant:"body2",children:"Need manual approval"}),(0,s.jsx)(o.A,{variant:"caption",color:"textSecondary",children:"Requires approval for requesting this API"})]})}),(0,s.jsx)(K.A,{value:"automatic",control:(0,s.jsx)(B.A,{color:"primary"}),label:(0,s.jsxs)(i.A,{children:[(0,s.jsx)(o.A,{variant:"body2",children:"Automatic"}),(0,s.jsx)(o.A,{variant:"caption",color:"textSecondary",children:"Keys are created without need to be approved"})]})})]})})]}),(0,s.jsxs)(q.A,{children:[(0,s.jsx)(c.A,{onClick:et,disabled:ge,children:"Cancel"}),(0,s.jsx)(c.A,{onClick:async()=>{Ae(""),ye(!0);try{if(!ie)throw new Error("Please select an HTTPRoute");const[e,t]=ie.split("/"),s=e,n={apiVersion:"devportal.kuadrant.io/v1alpha1",kind:"APIProduct",metadata:{name:y,namespace:s,labels:{lifecycle:ee}},spec:{displayName:j,description:P,version:I,approvalMode:G,publishStatus:X,tags:ae,targetRef:{group:"gateway.networking.k8s.io",kind:"HTTPRoute",name:t,namespace:e},...oe||de?{contact:{...oe&&{email:oe},...de&&{team:de}}}:{},...pe||he?{documentation:{...pe&&{docsURL:pe},...he&&{openAPISpecURL:he}}}:{}}};await g.createApiProduct(n),a({namespace:s,name:y,displayName:j}),et()}catch(e){Ae(e instanceof Error?e.message:String(e))}finally{ye(!1)}},color:"primary",variant:"contained",disabled:ge||!y||!j||!P||!ie||tt,startIcon:ge?(0,s.jsx)(O.A,{size:16,color:"inherit"}):void 0,children:ge?"Creating...":"Create"})]})]})};var J=a(34955),X=a(46205),Q=a(26997),ee=a(63221),te=a(46299);const ae=a.p+"static/empty-state-illustration.7e3ad5a9..png",se=(0,l.A)(e=>({container:{display:"flex",height:"100%",minHeight:400},tableContainer:{flex:1,overflow:"auto",padding:10},emptyState:{display:"flex",alignItems:"center",justifyContent:"center",padding:e.spacing(6),minHeight:400},emptyStateContent:{display:"flex",alignItems:"center",gap:e.spacing(6),maxWidth:900},emptyStateText:{flex:1},emptyStateTitle:{marginBottom:e.spacing(2)},emptyStateDescription:{marginBottom:e.spacing(3),color:e.palette.text.secondary},emptyStateImage:{maxWidth:400,height:"auto"}})),ne=()=>{const e=se(),t=(0,C.useApi)(k.s),a=(0,C.useApi)(C.alertApiRef),l=(0,C.useApi)(C.identityApiRef),T=(0,C.useApi)(I.v),[N,R]=(0,n.useState)(""),[z,D]=(0,n.useState)(!1),[L,$]=(0,n.useState)(!1),[M,H]=(0,n.useState)(0),[W,E]=(0,n.useState)(!1),[K,B]=(0,n.useState)(null),[q,O]=(0,n.useState)(null),[F,U]=(0,n.useState)(!1),[_,Y]=(0,n.useState)(null),[V,Z]=(0,n.useState)({status:[],lifecycle:[],policy:[],route:[],namespace:[],tags:[],authentication:[]}),{allowed:ne,loading:le,error:ie}=(0,X.l)(J.FL),{allowed:re,loading:oe}=(0,X.l)(J.EM),{allowed:ce,loading:de,error:ue}=(0,X.l)(J.R_),{allowed:pe}=(0,X.l)(J.U3),{allowed:me}=(0,X.l)(J.v_),he=oe||de,{allowed:ve,loading:xe,error:Ae}=(0,X.l)(J.J);(0,w.A)(async()=>{const e=await l.getBackstageIdentity();R(e.userEntityRef)},[l]);const{value:ge,loading:ye,error:fe}=(0,w.A)(async()=>t.getApiProducts(),[t,M]),{value:je,loading:be,error:Pe}=(0,w.A)(async()=>ve?t.getPlanPolicies():{items:[]},[t,M,ve]),{value:Se}=(0,w.A)(async()=>(await T.getEntities({filter:{kind:"API","metadata.labels.kuadrant.io/synced":"true"},fields:["metadata.name","spec.lifecycle"]})).items,[T,M]),we=(0,n.useMemo)(()=>{const e=new Map;if(Se)for(const a of Se){var t;const s=null===(t=a.spec)||void 0===t?void 0:t.lifecycle;s&&e.set(a.metadata.name,s)}return e},[Se]),Ce=(0,n.useCallback)(e=>we.get(e.metadata.name),[we]),Ie=(0,n.useCallback)(e=>{var t;if(!(null==je?void 0:je.items))return null;const a=null===(t=e.spec)||void 0===t?void 0:t.targetRef;if(!a)return null;const s=je.items.find(t=>{const s=t.spec.targetRef;return"HTTPRoute"===(null==s?void 0:s.kind)&&(null==s?void 0:s.name)===a.name&&(!(null==s?void 0:s.namespace)||(null==s?void 0:s.namespace)===(a.namespace||e.metadata.namespace))});return(null==s?void 0:s.metadata.name)||null},[je]),ke=(0,n.useCallback)(e=>{var t,a;const s=(null===(a=e.status)||void 0===a||null===(t=a.discoveredAuthScheme)||void 0===t?void 0:t.authentication)||{},n=Object.values(s),l=[];return n.some(e=>e.hasOwnProperty("apiKey"))&&l.push("API Key"),n.some(e=>e.hasOwnProperty("jwt"))&&l.push("OIDC"),0===l.length&&l.push("Unknown"),l},[]),Te=ye||be||le||he||xe,Ne=fe||Pe,Re=ie||ue||Ae,ze=(0,n.useMemo)(()=>{const e=(null==ge?void 0:ge.items)||[];return ne||pe||me?e:e.filter(e=>{var t;return"Published"===((null===(t=e.spec)||void 0===t?void 0:t.publishStatus)||"Draft")})},[ge,ne,pe,me]),De=(0,n.useMemo)(()=>{const e={Draft:0,Published:0},t=new Map,a=new Map,s=new Map,n=new Map,l=new Map,i=new Map;ze.forEach(r=>{var o,c,d,u;const p=(null===(o=r.spec)||void 0===o?void 0:o.publishStatus)||"Draft";e[p]++;const m=Ce(r);m&&t.set(m,(t.get(m)||0)+1);const h=Ie(r)||"N/A";a.set(h,(a.get(h)||0)+1);const v=(null===(d=r.spec)||void 0===d||null===(c=d.targetRef)||void 0===c?void 0:c.name)||"unknown";s.set(v,(s.get(v)||0)+1);const x=r.metadata.namespace;n.set(x,(n.get(x)||0)+1),((null===(u=r.spec)||void 0===u?void 0:u.tags)||[]).forEach(e=>{l.set(e,(l.get(e)||0)+1)}),ke(r).forEach(e=>{i.set(e,(i.get(e)||0)+1)})});const r=[{id:"status",title:"Publish Status",options:[{value:"Draft",label:"Draft",count:e.Draft},{value:"Published",label:"Published",count:e.Published}]},{id:"lifecycle",title:"Lifecycle",options:Array.from(t.entries()).map(([e,t])=>({value:e,label:e.charAt(0).toUpperCase()+e.slice(1),count:t}))},{id:"authentication",title:"Authentication",options:Array.from(i.entries()).map(([e,t])=>({value:e,label:e,count:t}))},{id:"route",title:"Route",options:Array.from(s.entries()).map(([e,t])=>({value:e,label:e,count:t})),collapsed:s.size>5},{id:"namespace",title:"Namespace",options:Array.from(n.entries()).map(([e,t])=>({value:e,label:e,count:t})),collapsed:n.size>5},{id:"tags",title:"Tags",options:Array.from(l.entries()).map(([e,t])=>({value:e,label:e,count:t})),collapsed:l.size>5}];return ve&&r.splice(2,0,{id:"policy",title:"Policy",options:Array.from(a.entries()).map(([e,t])=>({value:e,label:e,count:t})),collapsed:a.size>5}),r},[ze,Ie,ke,Ce,ve]),Le=(0,n.useMemo)(()=>ze.filter(e=>{if(V.status.length>0){var t;const a=(null===(t=e.spec)||void 0===t?void 0:t.publishStatus)||"Draft";if(!V.status.includes(a))return!1}if(V.lifecycle&&V.lifecycle.length>0){const t=Ce(e);if(!t||!V.lifecycle.includes(t))return!1}if(V.authentication.length>0){const t=ke(e);if(!V.authentication.some(e=>t.includes(e)))return!1}if(V.policy.length>0){const t=Ie(e)||"N/A";if(!V.policy.includes(t))return!1}if(V.route.length>0){var a,s;const t=(null===(s=e.spec)||void 0===s||null===(a=s.targetRef)||void 0===a?void 0:a.name)||"unknown";if(!V.route.includes(t))return!1}if(V.namespace.length>0&&!V.namespace.includes(e.metadata.namespace))return!1;if(V.tags.length>0){var n;const t=(null===(n=e.spec)||void 0===n?void 0:n.tags)||[];if(!V.tags.some(e=>t.includes(e)))return!1}return!0}),[ze,V,Ie,ke,Ce]),$e=[{title:"Name",field:"spec.displayName",render:e=>{var t,a;const n=null!==(a=null===(t=e.spec)||void 0===t?void 0:t.displayName)&&void 0!==a?a:e.metadata.name;return(0,s.jsx)(g.N_,{to:`/kuadrant/api-products/${e.metadata.namespace}/${e.metadata.name}`,children:(0,s.jsx)("strong",{children:n})})},customFilterAndSearch:(e,t)=>{var a;return((null===(a=t.spec)||void 0===a?void 0:a.displayName)||t.metadata.name||"").toLowerCase().includes(e.toLowerCase())}},{title:"Version",field:"spec.version",render:e=>{var t;return(null===(t=e.spec)||void 0===t?void 0:t.version)||"-"}},{title:"Route",field:"spec.targetRef.name",render:e=>{var t,a;return(null===(a=e.spec)||void 0===a||null===(t=a.targetRef)||void 0===t?void 0:t.name)||"-"}},...ve?[{title:"Policy",field:"policy",render:e=>Ie(e)||"N/A"}]:[],{title:"Tags",field:"spec.tags",render:e=>{var t;const a=(null===(t=e.spec)||void 0===t?void 0:t.tags)||[];return 0===a.length?"-":(0,s.jsx)(i.A,{display:"flex",style:{gap:4,flexWrap:"wrap"},children:a.map(e=>(0,s.jsx)(r.A,{label:e,size:"small",variant:"outlined"},e))})}},{title:"Status",field:"spec.publishStatus",render:e=>{var t;const a=(null===(t=e.spec)||void 0===t?void 0:t.publishStatus)||"Draft";return(0,s.jsx)(r.A,{label:a,size:"small",color:"Published"===a?"primary":"default"})}},{title:"Lifecycle",render:e=>{const t=Ce(e);return t?(0,s.jsx)(r.A,{label:t.charAt(0).toUpperCase()+t.slice(1),size:"small",style:(0,te.ee)(t)}):"-"}},{title:"Authentication",field:"status.discoveredAuthScheme",render:e=>{var t,a;const n=(null===(a=e.status)||void 0===a||null===(t=a.discoveredAuthScheme)||void 0===t?void 0:t.authentication)||{},l=Object.values(n),c=l.some(e=>e.hasOwnProperty("apiKey")),d=l.some(e=>e.hasOwnProperty("jwt"));return c||d?(0,s.jsxs)(i.A,{display:"flex",style:{gap:4},children:[c&&(0,s.jsx)(r.A,{icon:(0,s.jsx)(v.A,{}),label:"API Key",size:"small",color:"primary"}),d&&(0,s.jsx)(r.A,{icon:(0,s.jsx)(x.A,{}),label:"OIDC",size:"small",color:"secondary"})]}):(0,s.jsx)(o.A,{variant:"body2",style:{fontStyle:"italic"},children:"unknown"})}},{title:"Namespace",field:"metadata.namespace"},{title:"Actions",field:"actions",filtering:!1,render:e=>{var n,l,r;const o=(null===(l=e.metadata)||void 0===l||null===(n=l.annotations)||void 0===n?void 0:n["backstage.io/owner"])===N,u=me||pe&&o,p=ce||re&&o,v="Published"===(null===(r=e.spec)||void 0===r?void 0:r.publishStatus);return(0,s.jsxs)(i.A,{display:"flex",alignItems:"center",style:{gap:4},children:[u&&(0,s.jsx)(c.A,{size:"small",color:"primary",onClick:()=>(async e=>{var s,n;const l=e.metadata.namespace,i=e.metadata.name,r=(null===(s=e.spec)||void 0===s?void 0:s.displayName)||i,o="Published"===((null===(n=e.spec)||void 0===n?void 0:n.publishStatus)||"Draft")?"Draft":"Published";if("Published"===o&&"retired"===Ce(e))return void a.post({message:"Cannot publish a retired API product. Please change the lifecycle status first.",severity:"error",display:"transient"});const c={spec:{publishStatus:o}};try{await t.updateApiProduct(l,i,c),H(e=>e+1),a.post({message:`"${r}" ${"Published"===o?"published":"unpublished"} successfully`,severity:"success",display:"transient"})}catch(e){const t=e instanceof Error?e.message:"unknown error occurred";a.post({message:`Failed to update publish status: ${t}`,severity:"error",display:"transient"})}})(e),style:{marginRight:4,textTransform:"none"},children:v?"Unpublish":"Publish"}),u&&(0,s.jsx)(d.A,{size:"small",onClick:()=>{return t=e.metadata.namespace,a=e.metadata.name,O({namespace:t,name:a}),void $(!0);var t,a},title:"Edit API Product",children:(0,s.jsx)(h.A,{fontSize:"small"})}),p&&(0,s.jsx)(d.A,{size:"small",onClick:()=>(async(e,s)=>{B({namespace:e,name:s}),Y(null);try{const a=(await t.getAllRequestsByApiProduct(s,e)).items||[],n=a.filter(e=>{var t;return"Approved"===(null===(t=e.status)||void 0===t?void 0:t.phase)}).length;Y({requests:a.length,secrets:n})}catch(e){const t=e instanceof Error?e.message:"unknown error occurred";a.post({message:`Failed to delete access request: ${t}`,severity:"error",display:"transient"})}finally{E(!0)}})(e.metadata.namespace,e.metadata.name),title:"Delete API Product",children:(0,s.jsx)(m.A,{fontSize:"small"})})]})}}];return(0,s.jsxs)(y.Y,{themeId:"tool",children:[(0,s.jsx)(f.Y,{title:"API Products",subtitle:"Manage API products for Kubernetes",children:(0,s.jsx)(j.Y,{children:"Manage API products and plan policies"})}),(0,s.jsxs)(b.U,{children:[Te&&(0,s.jsx)(i.A,{p:2,children:[...Array(5)].map((e,t)=>(0,s.jsx)(i.A,{p:2,children:(0,s.jsx)(u.A,{variant:"text",width:"100%"})},t))}),Ne&&(0,s.jsx)(P._,{error:Ne}),Re&&(0,s.jsxs)(i.A,{p:2,children:[(0,s.jsxs)(o.A,{color:"error",children:["unable to check permissions: ",Re.message]}),(0,s.jsxs)(o.A,{variant:"body2",color:"textSecondary",children:["permission:"," ",ie?"kuadrant.apiproduct.create":ue?"kuadrant.apiproduct.delete":Ae?"kuadrant.planpolicy.list":"unknown"]}),(0,s.jsx)(o.A,{variant:"body2",color:"textSecondary",children:"please try again or contact your administrator"})]}),!Te&&!Ne&&!Re&&0===ze.length&&(0,s.jsx)(i.A,{className:e.emptyState,children:(0,s.jsxs)(i.A,{className:e.emptyStateContent,children:[(0,s.jsxs)(i.A,{className:e.emptyStateText,children:[(0,s.jsx)(o.A,{variant:"h4",className:e.emptyStateTitle,children:"API Product"}),(0,s.jsx)(o.A,{variant:"body1",className:e.emptyStateDescription,children:"Create API product by registering existing API, associate route and policy"}),ne&&(0,s.jsx)(c.A,{variant:"contained",color:"primary",startIcon:(0,s.jsx)(p.A,{}),onClick:()=>D(!0),children:"Create API Product"})]}),(0,s.jsx)("img",{src:ae,alt:"API Product illustration",className:e.emptyStateImage})]})}),!Te&&!Ne&&!Re&&ze.length>0&&(0,s.jsxs)(i.A,{className:e.container,children:[(0,s.jsx)(A.Z,{sections:De,filters:V,onChange:Z}),(0,s.jsxs)(i.A,{className:e.tableContainer,children:[(0,s.jsx)(i.A,{display:"flex",justifyContent:"flex-end",mb:2,children:ne&&(0,s.jsx)(c.A,{variant:"contained",color:"primary",size:"small",startIcon:(0,s.jsx)(p.A,{}),onClick:()=>D(!0),children:"Create API Product"})}),0===Le.length?(0,s.jsx)(i.A,{p:4,textAlign:"center",children:(0,s.jsx)(o.A,{variant:"body1",color:"textSecondary",children:"No API products match the selected filters."})}):(0,s.jsx)(S.X,{options:{paging:Le.length>10,pageSize:20,search:!0,filtering:!1,debounceInterval:300,toolbar:!0,emptyRowsWhenPaging:!1},columns:$e,data:Le})]})]}),(0,s.jsx)(G,{open:z,onClose:()=>D(!1),onSuccess:e=>{H(e=>e+1),a.post({message:`"${e.displayName}" created successfully`,severity:"success",display:"transient"})}}),(0,s.jsx)(Q.C,{open:L,onClose:()=>$(!1),onSuccess:()=>{H(e=>e+1);const e=(null==q?void 0:q.name)||"API Product";a.post({message:`"${e}" updated successfully`,severity:"success",display:"transient"})},namespace:(null==q?void 0:q.namespace)||"",name:(null==q?void 0:q.name)||""}),(0,s.jsx)(ee.K,{open:W,title:"Delete API Product",description:_?`Deleting "${null==K?void 0:K.name}" will also remove:\n\n• ${_.requests} API Key(s)\n• ${_.secrets} API Key Secret(s)\n\nThis action cannot be undone.`:`Deleting "${null==K?void 0:K.name}" will also remove all associated API Keys and Secrets.\nThis action cannot be undone.`,confirmText:null==K?void 0:K.name,severity:"high",deleting:F,onConfirm:async()=>{if(K){U(!0);try{await t.deleteApiProduct(K.namespace,K.name);const e=(null==K?void 0:K.name)||"API Product";H(e=>e+1),a.post({message:`"${e}" deleted successfully`,severity:"success",display:"transient"})}catch(e){const t=e instanceof Error?e.message:"unknown error occurred";a.post({message:`Failed to delete API Product: ${t}`,severity:"error",display:"transient"})}finally{U(!1),E(!1),B(null)}}},onCancel:()=>{E(!1),B(null)}})]})]})},le=()=>(0,s.jsx)(T.B,{permission:J.vs,errorMessage:"you don't have permission to view the Kuadrant page",children:(0,s.jsx)(ne,{})})},38599:(e,t,a)=>{a.d(t,{B:()=>o});var s=a(31085),n=(a(95478),a(10394)),l=a(72501),i=a(4387),r=a(46205);const o=({children:e,permission:t,fallback:a,errorMessage:o})=>{const{allowed:c,loading:d,error:u}=(0,r.l)(t);return d?(0,s.jsx)(n.A,{p:2,children:[...Array(5)].map((e,t)=>(0,s.jsx)(n.A,{p:2,children:(0,s.jsx)(i.A,{variant:"text",width:"100%"})},t))}):u?(0,s.jsxs)(n.A,{p:4,children:[(0,s.jsxs)(l.A,{color:"error",children:["Unable to check permissions: ",u.message]}),(0,s.jsx)(l.A,{variant:"body2",color:"textSecondary",children:"Please try again or contact your administrator"})]}):c?(0,s.jsx)(s.Fragment,{children:e}):a?(0,s.jsx)(s.Fragment,{children:a}):(0,s.jsxs)(n.A,{p:4,children:[(0,s.jsx)(l.A,{color:"textSecondary",children:o||"You don't have permission to view this page"}),(0,s.jsx)(n.A,{mt:1,children:(0,s.jsxs)(l.A,{variant:"caption",color:"textSecondary",children:["Required permission: ",t.name]})})]})}}}]);
|
|
2
|
+
//# sourceMappingURL=2821.1e3d6dc4.chunk.js.map
|